我有一个二进制字符串:
1010010111100101100010101010011011010001111100000010101000000000010000000111110111100"
如何将它转换为十六进制字符串?
我尝试使用包装类Long
和Integer
,但它对我无效,并抛出NumberFormatException
异常。
我有一个二进制字符串:
1010010111100101100010101010011011010001111100000010101000000000010000000111110111100"
如何将它转换为十六进制字符串?
我尝试使用包装类Long
和Integer
,但它对我无效,并抛出NumberFormatException
异常。
你需要使用BigInteger
- 数字太大了,无法放入原始值中。在long
中可以存储的最大数字是9223372036854775807,而这个二进制字符串对应的十进制值要大得多,为25069592479040759763832764。这就是为什么你会收到NumberFormatException
的原因。
因此,使用BigInteger
:
String s = "1010010111100101100010101010011011010001111100000010101000000000010000000111110111100";
BigInteger b = new BigInteger(s, 2);
System.out.println(b.toString(16));
...这将得到:14bcb154da3e0540080fbc
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;
}
由于二进制字符串的长度可能超过整数或长整数的容量,因此最好使用BigInteger。请记住,在Java中,int始终为32位,long为64位。
String binaryString = "1010010111100101100010101010011011010001111100000010101000000000010000000111110111100";
String hexString = new BigInteger(binaryString, 2).toString(16);
如果您正在使用大数字:
String hexString = new BigInteger(binaryString, 2).toString(16);
我使用这个
fun String.binToHex(): String {
val out = StringBuilder()
val outArray = this.deviceInParts(4)
outArray.forEach {
if (it == "0000") out.append('0')
if (it == "0001") out.append('1')
if (it == "0010") out.append('2')
if (it == "0011") out.append('3')
if (it == "0100") out.append('4')
if (it == "0101") out.append('5')
if (it == "0110") out.append('6')
if (it == "0111") out.append('7')
if (it == "1000") out.append('8')
if (it == "1001") out.append('9')
if (it == "1010") out.append('A')
if (it == "1011") out.append('B')
if (it == "1100") out.append('C')
if (it == "1101") out.append('D')
if (it == "1110") out.append('E')
if (it == "1111") out.append('F')
}
return out.toString()
}
fun String.deviceInParts(parts: Int): ArrayList<String> {
val outArray = arrayListOf<String>()
for (i in 0 until this.length step parts) {
outArray.add(this.subString(i, parts))
}
return outArray
}