为什么我用这个Integer.parseInt(x,y)得到一个NumberFormatException?

时间:2011-12-28 22:07:11

标签: java hex parseint

我的代码很简单:

int idec = Integer.parseInt(value, 16);

当我输入值“01dae610”时,我正确地得到“31122960”。 当我输入值“d149e510”时,我得到一个java.lang.NumberFormatException。正确的值是:“3511280912”。

我不知道为什么会这样。有人可以帮忙吗?

5 个答案:

答案 0 :(得分:7)

因为它超出了int的范围。请改用long / Long

答案 1 :(得分:1)

在Java中

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(含)。