我的代码很简单:
int idec = Integer.parseInt(value, 16);
当我输入值“01dae610”时,我正确地得到“31122960”。 当我输入值“d149e510”时,我得到一个java.lang.NumberFormatException。正确的值是:“3511280912”。
我不知道为什么会这样。有人可以帮忙吗?
答案 0 :(得分:7)
因为它超出了int
的范围。请改用long
/ Long
。
答案 1 :(得分:1)
int
签名 - 因此最大值为2 31 - 1。
如果您使用Long.parseLong(value, 16)
,您将获得所需的价值。如果您很乐意获得正确的位模式,则可以转回int
,但会将其解释为负值。
答案 2 :(得分:0)
仅仅因为它超出了int
的范围。您应该使用long
数据类型。
答案 3 :(得分:0)
Integer.MAX_VALUE
是2147483647,低于您期望的值。因此,此字符串不代表可以解析为int
的任何内容。因此例外。
答案 4 :(得分:0)
来自here:
int数据类型是32位带符号的二进制补码整数。它有 最小值-2,147,483,648,最大值2,147,483,647 (含)。
3,511,280,912> 2,147,483,647,它解释了NumberFormatException
。
但是,您可以使用long
。从同一页面:
长数据类型是64位带符号的二进制补码整数。它有 最小值为-9,223,372,036,854,775,808,最大值为 9,223,372,036,854,775,807(含)。