为什么NumberFormatException抛出当我尝试Integer.parseInt("80000010", 16)
?那IS一个32位的数字,这是java的int的大小。Integer.parseInt()不解析大的负数
编辑: 最好的部分是这样的......
int z = 0x80000010;
System.err.println("equal to " + z);
打印-2147483632
这的确是根据我的计算器0x80000010
)
为什么NumberFormatException抛出当我尝试Integer.parseInt("80000010", 16)
?那IS一个32位的数字,这是java的int的大小。Integer.parseInt()不解析大的负数
编辑: 最好的部分是这样的......
int z = 0x80000010;
System.err.println("equal to " + z);
打印-2147483632
这的确是根据我的计算器0x80000010
)
你可以做
int value = (int) Long.parseLong("80000010", 16)
更新:
随着Java 8 update(2014),你可以写
int value = Integer.parseUnsignedInt("80000010", 16);
因为parseInt函数“解析字符串参数作为有符号整数” ,如API文档中所指定的。基数为16的值80000010在签名的32字节值的有效范围之外。
这是因为第一个参数是有符号整数,所以对于负数你必须明确给出负号。而在你的情况下,你有大的unsgined整数范围之外的数字。
你用16进制解析它,所以它大于整数的最大值。
80,00,00,10 = 2147483664
虽然一个Java整数具有2,147,483,647 的范围2,147,483,648 。
对于那些坚持使用Java < = 7,Guava提供了一个工具用于解析整数为 unsigned:
UnsignedInts.parseUnsignedInt("ffffffff", 16);
> -1
80000010在我的宇宙中不是一个负数。 – MusiGenesis 2011-03-30 16:04:26
你在标题'负数'中说,但例子是一个正数。 – 2011-03-30 16:04:54
Java不支持unsigned int是'邪恶的' – 2011-03-30 16:49:15