java中的hex到int数字格式exception
在尝试执行此操作时,我收到了数字格式exception
int temp = Integer.parseInt("C050005C",16);
如果我减少它转换的hex数中的一个数字,但不是。 为什么以及如何解决这个问题?
这会导致整数溢出,因为整数总是用Java签名。 从该方法的文档 (强调我的):
如果发生以下任何一种情况,则抛出
NumberFormatException
类型的exception:
- 第一个参数为null或者是长度为零的字符串。
- 基数小于Character.MIN_RADIX或大于Character.MAX_RADIX。
- 字符串的任何字符都不是指定基数的数字,除了第一个字符可能是减号’ – ‘(’\ u002D’),前提是字符串长度超过长度1。
- 字符串表示的值不是int类型的值。
但它会适合未签名的整数。 但这在Java中没有选择。
所以你最好的选择是使用long
,然后将那个long的低4个字节放入int:
long x = Long.parseLong("C050005C", 16); int y = (int)(x & 0xffffffff);
也许你甚至可以在这里按下“和”,但我现在无法测试。 但这可能会缩短它
int y = (int)Long.parseLong("C050005C", 16);
C050005C的小数是3226468444,大于Integer.MAX_VALUE 。 它不适合int
。
用这个:
long temp = Long.parseLong("C050005C",16);
signed int类型的范围是0x7FFFFFFF到-0x80000000。