2011-12-28 2 views
3

Мой код просто:Почему я получаю NumberFormatException с этим Integer.parseInt (x, y)?

int idec = Integer.parseInt(value, 16); 

Когда я вхожу в качестве значения "01dae610", я правильно получить "31122960". Когда я ввожу значение «d149e510», я получаю исключение java.lang.NumberFormatException. Правильное значение: «3511280912».

У меня нет подсказки, почему это так. Может кто-нибудь помочь?

ответ

7

Потому что это вне диапазона int. Вместо этого используйте long/Long.

+0

спасибо, довольно глупо от меня. Я думал, что у меня все в порядке. – Frans

1

int является подписал в Java - поэтому максимальное значение равно 2 - 1.

Если вы используете Long.parseLong(value, 16) вы получите нужную величину. Затем вы можете вернуть обратно в int, если вы счастливы получить правильный битовый шаблон, но вместо этого интерпретируете его как отрицательное.

0

Просто потому, что это вне диапазона int. Вместо этого вы должны использовать тип данных long.

0

Integer.MAX_VALUE - 2147483647, что ниже, чем ожидалось. Таким образом, эта строка не представляет ничего, что может быть проанализировано в int. Отсюда исключение.

0

От here:

Тип ИНТ данных представляет собой 32-разрядное знаковое двоичное дополнение целое. Он имеет минимальное значение -2,147,483,648 и максимальное значение 2,147,483,647 (включительно).

3,511,280,912> 2,147,483,647, что объясняет NumberFormatException.

Однако, вы можете использовать long. На этой же странице:

Длинный тип данных - это целое число дополнений, состоящее из 64-разрядных подписей. Он имеет минимальное значение -9,223,372,036,854,775,808 и максимальное значение 9,223,372,036,854,775,807 (включительно).

Смежные вопросы