当我尝试执行时,出现了数字格式异常。
int temp = Integer.parseInt("C050005C",16);
如果我减少十六进制数字中的一个数字,它会转换,但反之则不行。为什么?如何解决这个问题?
当我尝试执行时,出现了数字格式异常。
int temp = Integer.parseInt("C050005C",16);
如果我减少十六进制数字中的一个数字,它会转换,但反之则不行。为什么?如何解决这个问题?
在Java中,由于整数始终带符号,因此这将导致整数溢出。从该方法的文档中可以看到(我加了重点):
如果发生以下任何情况之一,则引发
NumberFormatException
异常:
- 第一个参数为 null 或长度为零的字符串。
- 基数小于 Character.MIN_RADIX 或大于 Character.MAX_RADIX。
- 字符串的任何字符都不是指定基数的数字,但如果该字符串的长度大于 1,则第一个字符可以是减号 '-' ('\u002D')。
- 字符串表示的值不是 int 类型的值。
然而,它可以适合于 无符号整数。从Java 8开始,有Integer.parseUnsignedInt可用(感谢Andreas):
int temp = Integer.parseIntUnsigned("C050005C",16);
在早期的Java版本中,您最好使用long
,然后将该long
的低4个字节放入一个int
中。
long x = Long.parseLong("C050005C", 16);
int y = (int) (x & 0xffffffff);
也许你甚至可以在这里省略按位“与”操作,但是我现在无法测试。但是这样可能会缩短代码为:
int y = (int) Long.parseLong("C050005C", 16);
long temp = Long.parseLong("C050005C", 16);
Integer.parseUnsignedInt(String s, int radix)
方法来实现无符号整数的解析。当然,你也需要使用Integer.toUnsignedString(int i)
方法来打印无符号整数的值。 - Andreas