67,513
社区成员
发帖
与我相关
我的任务
分享
/**
* 10 0010 1111 按每4个一组分开,在binarys[]中找到对应的下标idx,对应的hexs[idx]相连接。
* @param binaryStr 10 0010 1111
* @return hexStr 22F
*/
public static String binaryToHex(String binaryStr){
String binarys[] = new String[]{
"0000","0001","0010","0011",
"0100","0101","0110","0111",
"1000","1001","1010","1011",
"1100","1101","1110","1111"
};
String hexs[] = new String[]{
"0","1","2","3",
"4","5","6","7",
"8","9","A","B",
"C","D","E","F"
};
int n = binaryStr.length()%4;
if(n != 0){
int zeroNum = 0;
zeroNum = 4 - n;
for(int i=0; i< zeroNum; i++){
binaryStr = "0"+binaryStr;
}
n = n+1;
}
String hexStr = "";
for(int j=0; j<binaryStr.length()/4; j++){
String temp = binaryStr.substring(j*4, (j+1)*4);
int index = -1;
for(int k=0;k<16;k++){
if(binarys[k].equals(temp)){
index = k;
}
}
if(index != -1){
hexStr = hexStr + hexs[index];
}
}
return hexStr;
}
/**
* 10 0010 1111 按每4个一组分开,转化为int型数据index,然后hexs[index]相加。
* @param binaryStr 10 0010 1111
* @return hexStr 22F
*/
public static String binaryToHex2(String binaryStr){
String hexs[] = new String[]{
"0","1","2","3",
"4","5","6","7",
"8","9","A","B",
"C","D","E","F"
};
int n = binaryStr.length()%4;
if(n != 0){
int zeroNum = 0;
zeroNum = 4 - n;
for(int i=0; i< zeroNum; i++){
binaryStr = "0"+binaryStr;
}
n = n+1;
}
String hexStr = "";
for(int j=0; j<binaryStr.length()/4; j++){
String temp = binaryStr.substring(j*4, (j+1)*4);
int index =0;//下标 index=15,则对应输出 hexs[15] = F
int i = 3;
for(char c : temp.toCharArray()) {
String str = new String(new char[]{c});
index = index + ((Integer.parseInt(str))<<i) ;
i--;
}
hexStr = hexStr + hexs[index];
}
return hexStr;
}
final static char[] digits = {
'0' , '1' , '2' , '3' , '4' , '5' ,
'6' , '7' , '8' , '9' , 'a' , 'b' ,
'c' , 'd' , 'e' , 'f' , 'g' , 'h' ,
'i' , 'j' , 'k' , 'l' , 'm' , 'n' ,
'o' , 'p' , 'q' , 'r' , 's' , 't' ,
'u' , 'v' , 'w' , 'x' , 'y' , 'z'
};
private static String toUnsignedString(int i, int shift) {
char[] buf = new char[32];
int charPos = 32;
int radix = 1 << shift;
int mask = radix - 1;
do {
buf[--charPos] = digits[i & mask];
i >>>= shift;
} while (i != 0);
return new String(buf, charPos, (32 - charPos));
}
Integer.toHexString(Integer.valueOf("1010",2))