【发布时间】:2026-01-17 00:45:02
【问题描述】:
我的代码很简单:
int idec = Integer.parseInt(value, 16);
当我输入值“01dae610”时,我正确地得到了“31122960”。 当我输入值“d149e510”时,我得到一个 java.lang.NumberFormatException。正确的值为:“3511280912”。
我不知道这是为什么。有人可以帮忙吗?
【问题讨论】:
我的代码很简单:
int idec = Integer.parseInt(value, 16);
当我输入值“01dae610”时,我正确地得到了“31122960”。 当我输入值“d149e510”时,我得到一个 java.lang.NumberFormatException。正确的值为:“3511280912”。
我不知道这是为什么。有人可以帮忙吗?
【问题讨论】:
因为这超出了int 的范围。请改用long/Long。
【讨论】:
int 在 Java 中是 signed - 所以最大值是 231 - 1.
如果您使用Long.parseLong(value, 16),您将获得所需的值。然后,如果您愿意获得正确的位模式,则可以转换回 int,但将其解释为负值。
【讨论】:
仅仅是因为它超出了int 的范围。您应该改用long 数据类型。
【讨论】:
Integer.MAX_VALUE 是 2147483647,低于您的预期值。所以这个字符串不代表任何可以解析成int的东西。因此例外。
【讨论】:
来自here:
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(含)。
【讨论】: