Java 无法将十六进制字符串解析为 int
Java fails to parse a hex string as an int
谁能告诉我为什么这段代码会抛出异常?
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)
我 运行 在 Windows 7 上 JDK
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)
也许你想要的是
int num = (int) Long.parseLong(hex, 16);
问题是 >= 0x8000_0000 的数字太大,无法存储在 int
中
因为你正在使用 Java 8,请考虑 Integer.parseUnsignedInt
方法:
Integer.parseUnsignedInt(hex, 16);
您对无法返回自身的整数的困惑与 toHexString() 的特性有关,它 returns "abcdef01" 而不是真正代表您的原始整数的“-543210ff” . 运行这个要看:
int value = -0x543210ff;
assert(value == 0xabcdef01);
assert(value == Integer.parseInt("-543210ff", 16));
谁能告诉我为什么这段代码会抛出异常?
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)
我 运行 在 Windows 7 上 JDK
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)
也许你想要的是
int num = (int) Long.parseLong(hex, 16);
问题是 >= 0x8000_0000 的数字太大,无法存储在 int
因为你正在使用 Java 8,请考虑 Integer.parseUnsignedInt
方法:
Integer.parseUnsignedInt(hex, 16);
您对无法返回自身的整数的困惑与 toHexString() 的特性有关,它 returns "abcdef01" 而不是真正代表您的原始整数的“-543210ff” . 运行这个要看:
int value = -0x543210ff;
assert(value == 0xabcdef01);
assert(value == Integer.parseInt("-543210ff", 16));