为什么这个Java parseInt十六进制字符串导致NumberFormatException?

时间:2012-02-08 09:31:45

标签: java parseint

Integer.parseInt("ff8ca87c", 16);

由于某种原因,这给了我一个NumberFormatException。你知道为什么吗?

Exception in thread "main" java.lang.NumberFormatException: For input string: "ff8ca87c"
    at java.lang.NumberFormatException.forInputString(Unknown Source)
    at java.lang.Integer.parseInt(Unknown Source)
    at java.lang.Integer.valueOf(Unknown Source)

1 个答案:

答案 0 :(得分:6)

失败的原因是您尝试将+0xff8ca87c置于有符号整数中。 32位有符号整数的最大值为+0x7fffffff,因为最高有效位用于存储符号。

尝试使用long代替。 64位signed int的最大值为0x7fffffffffffffff,在这种情况下,这足以满足您的需求。

或者,在Java 8中,您可以使用Integer.parseUnsignedInt("ff8ca87c", 16);来将值视为无符号整数。