我有二进制字符串:
1010010111100101100010101010011011010001111100000010101000000000010000000111110111100"
如何将其转换为十六进制字符串?
我尝试使用包装器类Long
和Integer
,但它对我不起作用,抛出NumberFormatException
。
答案 0 :(得分:11)
你需要使用BigInteger
- 数字太大而不适合原始值。可以存储在long
中的最大数字是9223372036854775807,而此二进制字符串的十进制等效值要大得多,25069592479040759763832764。这就是为什么你得到NumberFormatException
。
所以使用BigInteger
:
String s = "1010010111100101100010101010011011010001111100000010101000000000010000000111110111100";
BigInteger b = new BigInteger(s, 2);
System.out.println(b.toString(16));
...给出:
14bcb154da3e0540080fbc
答案 1 :(得分:2)
由于二进制字符串的长度可能超过Integer或Long的容量,因此最好使用BigInteger。请记住,在Java中,int总是32位,长64位。
String binaryString = "1010010111100101100010101010011011010001111100000010101000000000010000000111110111100";
String hexString = new BigInteger(binaryString, 2).toString(16);
答案 2 :(得分:2)
public static String convertBinaryToHex(String binInPut) {
int chunkLength = binInPut.length() / 4, startIndex = 0, endIndex = 4;
String chunkVal = null;
for (int i = 0; i < chunkLength; i++) {
chunkVal = binInPut.substring(startIndex, endIndex);
System.out.println(Integer.toHexString(Integer.parseInt(chunkVal, 2)));
startIndex = endIndex;
endIndex = endIndex + 4;
}
return binInPut;
}
答案 3 :(得分:1)
如果你使用大数字:
String hexString = new BigInteger(binaryString, 2).toString(16);