Java无法将十六进制字符串解析为int

时间:2015-08-28 15:40:37

标签: java integer hex numberformatexception

有人能告诉我为什么这段代码会抛出异常吗?

int value = 0xabcdef01;
System.out.println(value);                 // prints -1412567295
String hex = Integer.toHexString(value);
System.out.println(hex);                   // prints abcdef01
// why does this line fail?
Integer.parseInt(hex, 16);  

此代码抛出以下异常:

java.lang.NumberFormatException: For input string: "abcdef01"
  at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
  at java.lang.Integer.parseInt(Integer.java:583)

我使用以下JDK在Windows 7上运行

java version "1.8.0_51"
Java(TM) SE Runtime Environment (build 1.8.0_51-b16)
Java HotSpot(TM) 64-Bit Server VM (build 25.51-b03, mixed mode)

3 个答案:

答案 0 :(得分:1)

也许你想要的是

int

问题是数字> = 0x8000_0000太大而无法存储在{{1}}

答案 1 :(得分:1)

在使用Java 8时,请考虑Integer.parseUnsignedInt方法:

Integer.parseUnsignedInt(hex, 16);  

答案 2 :(得分:1)

你对整数的混淆不会回归自身与toHexString()的特性有关,它返回“abcdef01”而不是“-543210ff”,它真正代表你的原始整数。运行此以查看:

  int value = -0x543210ff;
  assert(value == 0xabcdef01);
  assert(value == Integer.parseInt("-543210ff", 16));