一个二进制串
String binary="1010101010101000111000011111001110";
String hex=Integer.toHexString(Integer.valueOf(binary,0));
问题是如果binary的长度大于31位,下面就会报错,原因应该是Integer.toHex....这个Integer的位数是32位的,所以大于这个数会报错,那我要解快这个问题怎么办求代码
String binary="1010101010101000111000011111001110";
String hex=Integer.toHexString(Integer.valueOf(binary,0));
问题是如果binary的长度大于31位,下面就会报错,原因应该是Integer.toHex....这个Integer的位数是32位的,所以大于这个数会报错,那我要解快这个问题怎么办求代码
String hex=Long.toHexString(Long.valueOf(binary, 2));
但这只是让你报错的几率降低了
可以考虑用BigInteger
全部连起来用:
String hex=BigInteger.toString(new BigInteger(binary, 2), 16);
public static void main(String argc[]) {
String binary = "0000011110000000000000001111111111111111111111111111111111111111111111110000000000000000000000";
String a = "";
String temp = "";
StringBuffer sb = new StringBuffer();
if (binary.length() % 4 != 0)// 把串的长度补成4的倍数,如11000变为00011000
{
for (int j = 0; j < 4 - (binary.length() % 4); j++)
a += "0";
binary = a + binary;
}
for (int i = binary.length(); i >= 4; i = i - 4)// 4位变为16进制
{
temp = binary.substring(i - 4, i);
sb.append(Long.toHexString(Long.valueOf(temp, 2)));
}
sb = sb.reverse();
while (sb.charAt(0) == '0' && !sb.equals("0"))// 取出串全面的0,00A3变为A3
{
sb = sb.deleteCharAt(0);
}
System.out.println(sb);
}
}