Исключение функции синтаксического анализа типа цифра c с отрицательными числами - PullRequest
5 голосов
/ 24 марта 2020
System.out.println(Integer.parseInt("7FFFFFFF", 16)); //this is ok.
System.out.println(Integer.parseInt("FFFFFFFF", 16)); //this throws Exception
System.out.println(Integer.valueOf("FFFFFFFF", 16)); //this throws Exception

Когда я пытаюсь преобразовать шестнадцатеричное число в целочисленный тип, отрицательные числа с помощью методов parseInt или valueOf, метод генерирует NumberFormatException для отрицательных чисел. Я нигде не мог найти ответ.

Ответы [ 2 ]

5 голосов
/ 24 марта 2020

Integer.parseInt() и Integer.valueOf() ожидают знак минус (-) для отрицательных значений.

Следовательно, "FFFFFFFF" анализируется как положительное значение, которое больше Integer.MAX_VALUE. Отсюда и исключение.

Если вы хотите проанализировать его как отрицательное значение, проанализируйте его как long и приведите к int:

System.out.println((int)Long.parseLong("FFFFFFFF", 16));

print

-1
2 голосов
/ 24 марта 2020

Integer.parseInt("FFFFFFFF", 16) не означает «дай мне int с этим шестнадцатеричным битовым шаблоном». Это означает «интерпретировать FFFFFFFF как представление числа в формате base-16 и дать мне int, представляющее то же число».

Это число является положительным числом 4294967295, который вне диапазона для int, отсюда исключение.

...