2015-01-16 248 views
0

我有一些將十六進制字符串轉換爲字節的Java代碼。它似乎很適合非常短的十六進制字符串,但標記錯誤,如果我使用長字符串,但我不知道爲什麼。我不熟悉Java和編程。隨意指出我可以改進的任何其他領域。從十六進制轉換爲字節

這裏是我的代碼:

public class Hextobinary { 

static String hexToBinary(String hex) { 
    int i = Integer.parseInt(hex, 16); 
String bin = Integer.toBinaryString(i); 
return bin; 
} 

public static void main(String[] args) { 

    String h = "5F"; 
String x = hexToBinary(h); 
    System.out.println(x); 
} 

}

非常感謝

+0

「一個錯誤」 - 哪一個? 「長串」 - 多久?例如,一個terabyte? – usr2564301

+1

@fdama您應該始終包含實際數據的樣本(失敗和成功)。你可以[編輯]你的問題嗎? –

+0

@gtgaxiola道歉。我提供了錯誤的版本。現在更正。 – fdama

回答

3

有一個內置的這種使用DatatypeConverter,所以你可以不必自己做。

import javax.xml.bind.DatatypeConverter; 

public class HexUtils { 

    public String toHex(final byte[] arr) { 
     return DatatypeConverter.printHexBinary(arr); 
    } 

    public byte[] fromHex(final String str) { 
     return DatatypeConverter.parseHexBinary(str); 
    } 

} 
+0

感謝您的支持。我會試試這個。 – fdama

+0

嗨託德,我已經給了這個嘗試,但只有第一個十六進制轉換。我如何轉換整個字符串的十六進制? – fdama

1

您正在將您的字符串解析爲int。這將適用於較短的十六進制字符串,但不適用於較長的字符串。 int是32位或8個十六進制字符。任何比這更長的字符串將不適合int

如果您確實編寫了自己的方法,然後將十六進制字符串拆分爲兩個字符塊,並將每對字符分別處理爲一個字節,並將字節存儲在字節數組中。這將允許你處理更長的十六進制字符串。

+0

感謝您分享。我會給這個鏡頭並挑戰自己。 – fdama

1

如果您使用的是大型字符串,則變量i的類型int(Integer)無法存儲字符串十六進制中包含的值。整數只能存儲從-80000000(十六進制)到+ 7FFFFFFF的值。任何更長的字符串都會導致函數產生錯誤的結果。

一個快速的解決方案是使用類型Long(和函數parseLong)而不是整數。 Long類型可以保存從-8000000000000000(十六進制)到+ 7FFFFFFFFFFFFFFF的值。但是如果你需要轉換更長的字符串,這不會再起作用。

相關問題