爲什麼NumberFormatException拋出當我嘗試Integer.parseInt("80000010", 16)
?那IS一個32位的數字,這是java的int的大小。Integer.parseInt()不解析大的負數
編輯: 最好的部分是這樣的......
int z = 0x80000010;
System.err.println("equal to " + z);
打印-2147483632
這的確是根據我的計算器0x80000010
)
爲什麼NumberFormatException拋出當我嘗試Integer.parseInt("80000010", 16)
?那IS一個32位的數字,這是java的int的大小。Integer.parseInt()不解析大的負數
編輯: 最好的部分是這樣的......
int z = 0x80000010;
System.err.println("equal to " + z);
打印-2147483632
這的確是根據我的計算器0x80000010
)
你可以做
int value = (int) Long.parseLong("80000010", 16)
更新:
隨着Java 8 update(2014),你可以寫
int value = Integer.parseUnsignedInt("80000010", 16);
因爲parseInt函數「解析字符串參數作爲有符號整數」 ,如API文檔中所指定的。基數爲16的值80000010在簽名的32字節值的有效範圍之外。
這是因爲第一個參數是有符號整數,所以對於負數你必須明確給出負號。而在你的情況下,你有大的unsgined整數範圍之外的數字。
你用16進制解析它,所以它大於整數的最大值。
80,00,00,10 = 2147483664
雖然一個Java整數具有2,147,483,647 的範圍2,147,483,648 。
對於那些堅持使用Java < = 7,Guava提供了一個工具用於解析整數爲 unsigned:
UnsignedInts.parseUnsignedInt("ffffffff", 16);
> -1
80000010在我的宇宙中不是一個負數。 – MusiGenesis 2011-03-30 16:04:26
你在標題'負數'中說,但例子是一個正數。 – 2011-03-30 16:04:54
Java不支持unsigned int是'邪惡的' – 2011-03-30 16:49:15