2012-12-03 70 views
1

我有代碼看起來像這樣二進制字符串爲十六進制的Java

   public static void main(String[] args) { 
    String string= "11011100010000010001000000000000"; 
    String string1= "00000000010000110000100000101100"; 

    System.out.println(Integer.toHexString(Integer.parseInt(string1,2))); 

    System.out.println(Integer.toHexString(Integer.parseInt(string,2))); 


} 

第一個字符串轉換得很好,但第二個具有java.lang.NumberFormatException 的錯誤不知道是什麼問題

+0

歡迎SO!你應該「檢查」你接受的答案。這不僅會將問題標記爲已關閉,而且還會爲幫助您解決問題的人員帶來紅利。 –

回答

1

當32個字符的二進制數的最高有效位設置爲1時,結果值超出了int支持的正數範圍,不能再解釋爲有效整數。這根據文檔導致異常:如果發生以下任一情況

NumberFormatException類型,則拋出異常:

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

爲了進入這個負二進制值,在您的號碼前使用-標誌,其餘位轉換成2的補碼錶示。

如果您需要的數字長度超過32位,或者您希望該值繼續被解釋爲正數,則需要切換到64位整數數據類型。

+0

+1,但'parseInt'及其相反與「真正的二進制」無關,它們工作在基數爲2的數字系統上。沒有重要的一點,字符串長度不超過32個字符的事實與任何其他數量的處理方式不同。所以在這個數字前加一個'-',就相當於基數爲10的-3695251456,並且會導致相同的異常。 – Esailija

4

試試這個:

Long.toHexString(Long.parseLong(string,2)) 

(從parsLong編輯以parseLong)

+0

你快速thx很多! –

+0

雖然這個解釋沒有意義。以'0'開始與它無關。 – Esailija

+0

即時通訊嘗試將其轉換爲指定長度所需的十六進制值 –

1

您可以使用Long而不是Integer,(Long.parseLongLong.toHexString方法)。

0

如果你想解析成整數時,範圍應

1000000000000000000000000000000001111111111111111111111111111111

3

對於什麼是值得的,你也可以使用BigInteger類:

String string = "11011100010000010001000000000000"; 
String string1 = "00000000010000110000100000101100"; 

System.out.println(new BigInteger(string1, 2).toString(16)); 
System.out.println(new BigInteger(string, 2).toString(16)); 
相關問題