0
我試圖從Integer解析Integer.MIN_VALUE到int,但是我得到一個NumberFormatException異常。當我爲字符串添加減號時,它正在工作。從十六進制解析Integer.MIN_VALUE會導致NumberFormatException
這是一個錯誤還是我誤解了一些東西。從我的角度來看,編碼和解碼應該是雙射的。但它似乎不是。
我必須解碼「0x80000000」。我該怎麼做?我可以捕獲異常並向String中添加一個減號並重試。但是這對我來說似乎並不乾淨。
又來了一個運行示例:
public static void main(String[] args) {
int i1 = Integer.MIN_VALUE; //0x80000000
String s1 = Integer.toHexString(i1);
String s2 = "-" + s1;
System.out.println(String.format("Out1: %1$d | %1$h == %2$s <> %3$s", i1 , s1, s2));
// Out1: -2147483648 | 80000000 == 80000000 <> -80000000
// this should work, but does not
try {
int s1_parsed = Integer.parseInt(s1, 16);
System.out.println(String.format("Out2: %1$d | %1$h, %2$d | %2$h", i1, s1_parsed));
} catch (NumberFormatException ex) {
ex.printStackTrace();
}
// this is working, but I do not know why
try {
int s2_parsed = Integer.parseInt(s2, 16);
System.out.println(String.format("Out3: %1$d | %1$h == %2$d | %2$h", i1, s2_parsed));
// Out3: -2147483648 | 80000000 == -2147483648 | 80000000
} catch (NumberFormatException ex) {
ex.printStackTrace();
}
}