将大二进制字符串转换为十六进制

时间:2013-06-04 12:54:09

标签: java

我有二进制字符串:

1010010111100101100010101010011011010001111100000010101000000000010000000111110111100"

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

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

4 个答案:

答案 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);