int hex=Integer.parseInt(str.trim(),16);
String binary=Integer.toBinaryString(hex);
我有一个十六进制数字数组作为字符串,我想将这些数字转换为二进制字符串,上面是我使用的代码,在那里,我得到一个错误,如下所示
Exception in thread "main" java.lang.NumberFormatException: For input string: "e24dd004"
at java.lang.NumberFormatException.forInputString(Unknown Source)
at java.lang.Integer.parseInt(Unknown Source)
at sew1.javascript.main(javascript.java:20)
答案 0 :(得分:3)
Java中的最大整数为0x7fffffff
,因为它已签名。
使用
Long.parseLong(str.trim(),16);
或
BigInteger(str.trim(),16);
代替。
答案 1 :(得分:1)
问题是e24dd004
大于int
在Java中可以处理的问题。如果你使用long
,那就没关系了:
String str = "e24dd004";
long hex = Long.parseLong(str.trim(),16);
String binary=Long.toBinaryString(hex);
System.out.println(binary);
对于最高为7ffffffffffffffff的六角形有效。
然而,另一种方法是将每个十六进制数字直接转换为4个二进制数字,而不必转换为数字值。一种简单的方法是使用Map<Character, String>
,其中每个字符串是4位数。当然,这可能会让你领先0。
答案 2 :(得分:0)
使用BigInteger如下:
BigInteger bigInteger = new BigInteger("e24dd004", 16);
String binary = bigInteger.toString(2);
或使用Long.toBinaryString()
如下:
long longs = Long.parseLong("e24dd004",16);
String binary = Long.toBinaryString(longs);
答案 3 :(得分:0)
从java-8开始,您可以将整数视为无符号,因此您可以执行以下操作:
String str = "e24dd004";
int i = Integer.parseUnsignedInt(str, 16);
String binary = Integer.toBinaryString(i); //11100010010011011101000000000100
String backToHex = Integer.toUnsignedString(i, 16); //e24dd004
如果使用有符号值,您将能够处理不大于2^32-1
的值(而不是2^31-1
)。
如果你不能使用它,你就必须像其他答案一样解析它。