将十六进制数转换为二进制数

时间:2014-12-06 10:00:22

标签: java

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)

4 个答案:

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

开始,您可以将整数视为无符号,因此您可以执行以下操作:

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)。 如果你不能使用它,你就必须像其他答案一样解析它。