2013-10-15 44 views
0

我想將整數值轉換爲十六進制字符串。我快速地搜索計算器,做它的following way(作爲接受的解決方案 - 然而這並沒有看夠細心):試圖轉換整數到十六進制字符串NumberformatException

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

它拋出一個NumberFormatException

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

不過。 因此出於好奇 - 爲什麼拋出NumberFormatException?

(後來我改變了代碼Integer.toHexString(-2115381772)和一切工作正常。)

回答

2

因爲,

Integer.valueOf(String.valueOf(-2115381772), 16)認爲在十六進制(16)的基礎上,-2115381772值和另一個的範圍之外int值。所以你得到了這個例外。

Integer.toHexString(-2115381772)認爲-2115381772的值以十進制爲基數,它的值在int的範圍內。

2

-2115381772爲十六進制不適合在一個整數。

嘗試用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」(和btw。''-2115381772> -2147483648'')。 – steffen

相關問題