5

我有一个二进制字符串:

1010010111100101100010101010011011010001111100000010101000000000010000000111110111100"

如何将其转换为十六进制字符串?

我尝试使用包装类LongInteger,但它对我不起作用,抛出NumberFormatException.

4

4 回答 4

11

您需要为此使用BigInteger- 该数字太大而无法容纳原始值。可以存储在 a 中的最大数字long是 9223372036854775807,而这个二进制字符串的十进制等效值要大得多,即 25069592479040759763832764。这就是为什么你得到NumberFormatException.

所以用BigInteger

String s = "1010010111100101100010101010011011010001111100000010101000000000010000000111110111100";
BigInteger b = new BigInteger(s, 2);
System.out.println(b.toString(16));

...这使:

14bcb154da3e0540080fbc
于 2013-06-04T12:56:01.483 回答
2

由于二进制 String 的长度可能超过 Integer 或 Long 的容量,因此最好使用 BigInteger。请记住,在 Java 中,int 始终为 32 位,而 long 为 64 位。

String binaryString = "1010010111100101100010101010011011010001111100000010101000000000010000000111110111100";
String hexString = new BigInteger(binaryString, 2).toString(16);
于 2013-06-04T13:00:16.823 回答
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;

}
于 2016-08-08T11:32:59.107 回答
1

如果您使用大数字:

String hexString = new BigInteger(binaryString, 2).toString(16);
于 2013-06-04T13:00:23.463 回答