为什么在尝试Integer.parseInt("80000010", 16)
时会抛出NumberFormatException?那个 IS 是一个32位的数字,这是java的int。
编辑: 最好的部分是......
int z = 0x80000010;
System.err.println("equal to " + z);
根据我的计算器打印-2147483632
确实为0x80000010
;)
答案 0 :(得分:10)
因为parseInt“将字符串参数解析为有符号整数”,如API文档中所指定。带有基数16的值80000010超出了有符号32字节值的有效范围。
答案 1 :(得分:6)
你可以做到
int value = (int) Long.parseLong("80000010", 16)
<强>更新强>
使用Java 8 update(2014),您可以写
int value = Integer.parseUnsignedInt("80000010", 16);
答案 2 :(得分:4)
80,00,00,10 16 = 2,147,483,664 10
虽然Java整数的范围是-2,147,483,648 10 到2,147,483,647 10 。
答案 3 :(得分:2)
对于那些坚持使用Java&lt; = 7的人,Guava提供了一个用于解析整数的实用程序 无符号:
UnsignedInts.parseUnsignedInt("ffffffff", 16);
> -1
答案 4 :(得分:1)
这是因为第一个参数是有符号整数,所以对于负数,你必须明确地给出减号。在您的情况下,您在整数范围之外有大的未编号数字。
答案 5 :(得分:1)
你用16进行解析。所以它大于整数的最大值。