2009-10-21 51 views
2

試圖做到這一點十六進制爲int在Java

int temp = Integer.parseInt("C050005C",16); 

,如果我減少的數字之一,它轉換,但沒有其他的十六進制數字時,我得到一個數字格式異常號格式異常。爲什麼以及如何解決這個問題?

回答

10

這會導致整數溢出,因爲整數總是用Java簽名。從documentation of that method(重點煤礦):

  • 第一個參數是空值或零長度的字符串:

    如果發生以下任一情況NumberFormatException類型的則拋出異常。

  • 基數小於Character.MIN_RADIX或大於Character.MAX_RADIX。
  • 字符串的任何字符不是指定基數的數字,所不同的是第一個字符可以是負號「 - 」(「\ u002D」)爲提供的字符串比長度長1
  • 由字符串表示的值不是int類型的值。

融入一個符號整數,雖然。但在Java中這不是選項。

所以在這裏你最好的選擇可能會使用long,然後只把低4個字節的那麼長成一個int:

long x = Long.parseLong("C050005C", 16); 
int y = (int)(x & 0xffffffff); 

也許你甚至可以刪除位元「與」在這裏,但我現在無法測試。但是,這可能會縮短到

int y = (int)Long.parseLong("C050005C", 16); 
2

帶符號整型的範圍從0x7FFFFFFF到-0x80000000。

4

使用此:

long temp = Long.parseLong("C050005C",16);