2011-11-04 12 views
0

在我的Java程序中,我需要一個來自Hex String的字節數組。所以,我做到以下幾點:
byte[] key=HexUtils.convert("0AA387ED291F6D90");屬性文件中的十六進制值:JAVA

這十六進制字符串轉換成字節數組如下:
輸出:Byte Array: key:[10, -93, -121, -19, 41, 31, 109, -112]

現在,我想移動的十六進制字符串到屬性文件。但我無法這樣做。

Try 1:
Properties file ====> key=0AA387ED291F6D90
Java Program ====> byte[] key = HexUtils.convert(prop.getProperty("key"));

這給了錯誤:錯誤的十六進制數字

Try 2:
Properties file ====> key=\u000A\u00A3\u0087\u00ED\u0029\u001F\u006D\u0090
Java Program ====> byte[] key = HexUtils.convert(prop.getProperty("key"));

Output: key:[10, -93, 63, -19, 41, 31, 109, 63]

如果您注意到,2個字節與預期值不同。 Hex 87和Hex 90.兩者都轉換爲63.而我期望分別爲-121和-112。

有人可以幫我來我怎麼做這種轉換。我希望我很清楚!

•安格德

回答

1

如果使用\uxxxx代碼,您正在使用Unicode轉義序列。 \u0090最終不會被解釋爲字符串"90",它最終會以與UTF-16編碼中的代碼單元0090相對應的單個字符結尾。

你的第一種方法應該工作。我建議你嘗試System.out.println(prop.getProperty("key"));或其他形式的輸出,並檢查是否有前導或尾隨空白,某些你沒有想到的字符或null。後者意味着沒有找到「鑰匙」的財產。

+0

您好G_H, 由於優異的尖端。問題是屬性文件中的額外空格返回錯誤的字符串因此,轉換器給出了這個錯誤。 感謝您的及時回覆。 – tranceporter

+0

@tranceporter考慮接受,如果這解決了你的問題。) –

0

好像我有一些問題與字節,因爲字節簽訂,但是當你從字符串轉換,值大於127引起的問題,因爲他們是太大了。

我想我最終解析十六進制對一個在同一時間並將其轉換爲整數,並將它們存儲爲字節。

此外,根據你在做什麼,你可能會離開他們作爲整數因爲字節得到內部轉換爲整數做計算之前,因此整數會更快。

+0

是的,如果他們來在爲Unicode,他們字符他們是字節,我想這就是你的問題所在了。 – Thom