当我尝试使用Integer.parseInt("80000010", 16)
时,为什么会抛出NumberFormatException异常?? 这是一个32位数字,与Java的int类型大小相同。
编辑: 最好的部分是这个...
int z = 0x80000010;
System.err.println("equal to " + z);
打印出 -2147483632
,根据我的计算器,这确实是 0x80000010
。
当我尝试使用Integer.parseInt("80000010", 16)
时,为什么会抛出NumberFormatException异常?? 这是一个32位数字,与Java的int类型大小相同。
编辑: 最好的部分是这个...
int z = 0x80000010;
System.err.println("equal to " + z);
打印出 -2147483632
,根据我的计算器,这确实是 0x80000010
。
您可以做到
int value = (int) Long.parseLong("80000010", 16)
更新:
在Java 8更新(2014)中,您可以编写以下内容:
int value = Integer.parseUnsignedInt("80000010", 16);
80,00,00,1016 等于 2,147,483,66410
Java整数的范围为-2,147,483,64810至2,147,483,64710。
对于那些使用Java <= 7的人,Guava 提供了一个解析无符号整数的实用程序:
UnsignedInts.parseUnsignedInt("ffffffff", 16);
> -1
这是因为第一个参数是有符号整数,所以对于负数,您必须明确给出减号。而在您的情况下,您有一个超出整数范围的大的无符号数字。
你正在使用十六进制进行解析。因此它大于整数的最大值。
Integer.parseInt()接受一个带符号整数作为输入,这意味着输入必须在"7FFFFFFF"
和"-80000000"
之间。请注意0x80000000
前的负号。对于-2147483632
您想要的输入是正数2147483632 (0x7FFFFFF0)
并在前面加上负号,因此使用Integer.parseInt("-7FFFFFF0", 16)
。