2013-10-15 3 views
0

Я хотел преобразовать целочисленные значения в шестнадцатеричные строки. Я быстро искал StackOverflow и сделали это following way (как принято решение, указанное - однако не выглядел достаточно осторожным):Integer to hex String NumberformatException

Integer.valueOf(String.valueOf(n), 16); 

Однако при попытке преобразовать

Integer.valueOf(String.valueOf(-2115381772), 16) 

он бросает NumberFormatException. Итак, из любопытства - почему выбрано NumberFormatException?

(После этого я изменил код Integer.toHexString(-2115381772) и все работает, как ожидалось.)

ответ

2

Так,

Integer.valueOf(String.valueOf(-2115381772), 16) считает -2115381772 значение в шестнадцатеричной системе (16) основания, и что находится вне диапазона для int значения. Таким образом, вы получаете это исключение.

Integer.toHexString(-2115381772) оценивает -2115381772 значение в десятичной базе, и оно находится в диапазоне int значение.

2

-2115381772 в шестнадцатеричном не вписывается в Integer.

Попробуйте вместо Long.valueOf(String.valueOf(-2115381772), 16);.

1

Минимальное значение int: -2147483648.

Поэтому, когда вы даете какие-либо значения менее -80000000, NumberFormatException будет выброшен.

Потому что Integer.valueOf(String.valueOf(-80000000), 16) дает -2147483648 как выход, который является минимальным значением int.

+0

Не понимаю его полностью. -2115381772 <-2147483648 Таким образом, вполне допустимый int. Однако Мераман объяснил это ... – Lonzak

+0

Ну, вы указали значение '' -2115381772'' в шестнадцатеричном формате, и это '' -142089918322'' десятичное, что, конечно, меньше, чем '' -2147483648'' (и, кстати, '' -2115381772> -2147483648''). – steffen