System.out.println(Integer.parseInt("7FFFFFFF", 16)); //this is ok.
System.out.println(Integer.parseInt("FFFFFFFF", 16)); //this throws Exception
System.out.println(Integer.valueOf("FFFFFFFF", 16)); //this throws Exception
[当我尝试使用parseInt或valueOf方法将十六进制数转换为整数类型,负数时,该方法将为负数引发NumberFormatException。我在任何地方都找不到答案。
[Integer.parseInt()
和Integer.valueOf()
期望负号(-
)为负值。
因此,“ FFFFFFFF”被解析为大于Integer.MAX_VALUE
的正值。因此,例外。
如果要解析为负值,请将其解析为long
并转换为int
:
System.out.println((int)Long.parseLong("FFFFFFFF", 16));
打印
-1
Integer.parseInt("FFFFFFFF", 16)
并不表示“将具有十六进制位模式的int
给我”。它的意思是“将FFFFFFFF
解释为数字的以16为底的表示,并给我一个int
表示相同的数字”。
该数字为正数字4294967295,该数字超出int
的范围,因此是例外。
您可以使用:
BigInteger bi = new BigInteger("FFFFFFFF", 16); // 4294967295