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