Почему эта шестнадцатеричная строка Java parseInt приводит к NumberFormatException? - PullRequest
0 голосов
/ 08 февраля 2012
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 Ответ

6 голосов
/ 08 февраля 2012

Причиной сбоя является то, что вы пытаетесь поместить +0xff8ca87c в целое число со знаком.Максимальное значение 32-разрядного целого числа со знаком составляет +0x7fffffff, поскольку для хранения знака используется старший значащий бит.

Попробуйте вместо этого использовать long.Максимальное значение 64-битного целого со знаком - 0x7fffffffffffffff, что более чем достаточно для ваших нужд в этом случае.

Или в Java 8 вы можете использовать Integer.parseUnsignedInt("ff8ca87c", 16);, который будет рассматривать значение какцелое число без знака.

...