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

时间:2009-10-21 07:12:09

标签: java

尝试执行此操作时出现数字格式异常

int temp = Integer.parseInt("C050005C",16);

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

4 个答案:

答案 0 :(得分:11)

这会导致整数溢出,因为整数总是用Java签名。来自documentation of that method(强调我的):

  

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

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

符合 un 有符号整数。但这在Java中没有选择。

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

long x = Long.parseLong("C050005C", 16);
int y = (int)(x & 0xffffffff);

也许你甚至可以在这里按下“和”,但我现在无法测试。但这可能会缩短到

int y = (int)Long.parseLong("C050005C", 16);

答案 1 :(得分:5)

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

答案 2 :(得分:4)

使用此:

long temp = Long.parseLong("C050005C",16);

答案 3 :(得分:2)

signed int类型的范围从0x7FFFFFFF到-0x80000000。