java中的十六进制到int数字格式异常

ano*_*non 4 java

我在尝试这样做时遇到了数字格式异常

int temp = Integer.parseInt("C050005C",16);
Run Code Online (Sandbox Code Playgroud)

如果我减少它转换的十六进制数中的一个数字,但不是.为什么以及如何解决这个问题?

Joe*_*oey 11

这会导致整数溢出,因为整数总是用Java签名.从该方法文档(强调我的):

NumberFormatException如果发生以下任何一种情况,则抛出类型异常:

  • 第一个参数为null或者是长度为零的字符串.
  • 基数小于Character.MIN_RADIX或大于Character.MAX_RADIX.
  • 字符串的任何字符都不是指定基数的数字,除了第一个字符可能是减号' - '('\ u002D'),前提是字符串长度超过长度1.
  • 字符串表示的值不是int类型的值.

但它适合签名的整数.但这在Java中没有选择.

所以你最好的选择是使用a long,然后将那个long的低4个字节放入int:

long x = Long.parseLong("C050005C", 16);
int y = (int)(x & 0xffffffff);
Run Code Online (Sandbox Code Playgroud)

也许你甚至可以在这里按下"和",但我现在无法测试.但这可能会缩短它

int y = (int)Long.parseLong("C050005C", 16);
Run Code Online (Sandbox Code Playgroud)


Chs*_*y76 5

C050005C的小数是3226468444,大于Integer.MAX_VALUE.它不适合int.