具有负数的数字类型解析函数异常

问题描述 投票:5回答:2
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。我在任何地方都找不到答案。

java integer hex parseint
2个回答
5
投票

[Integer.parseInt()Integer.valueOf()期望负号(-)为负值。

因此,“ FFFFFFFF”被解析为大于Integer.MAX_VALUE的正值。因此,例外。

如果要解析为负值,请将其解析为long并转换为int

System.out.println((int)Long.parseLong("FFFFFFFF", 16));

打印

-1

2
投票

Integer.parseInt("FFFFFFFF", 16)并不表示“将具有十六进制位模式的int给我”。它的意思是“将FFFFFFFF解释为数字的以16为底的表示,并给我一个int表示相同的数字”。

该数字为数字4294967295,该数字超出int的范围,因此是例外。


0
投票

您可以使用:

BigInteger bi = new BigInteger("FFFFFFFF", 16); // 4294967295
© www.soinside.com 2019 - 2024. All rights reserved.