2013-05-30 192 views
0

我有個字節B的數組:解釋Java字節[]作爲字符串

b = [-98, -99] 

我需要數據的該段傳遞給函數。該函數接受一個字符串(這是不可更改的)。如何獲取Java解釋B中的原始二進制數據作爲字符串無需更改任何位在B

編輯

這不是一個重複:

Converting byte array to String (Java)

因爲數組b由位[1001 1110 1001 1101]或[9E9D]組成。如果我使用

String str = new String(b, "Cp1252") 

Cp1252編碼沒有位1001 1101或9D的序列值。所以這個函數的結果是str =「???」。二進制形式是[1001 1110 0011 1111]或[9E3F]。注意這個函數改變了我的位,這實質上破壞了我的數據。

我認爲這將在C++中使用reinterpret轉換來完成,但java中不存在這樣的事情。提前致謝。

+1

什麼是字節編碼?除非知道單個字節的含義,否則不能將字節流解釋爲字符串。 – Shrike

+0

'new String(b,Charset.forName(「cp1252」))'? – assylias

+0

你期望什麼字符[-98,-99,-100,-102,-104]變成? – Patashu

回答

0

你不能用任意值的任意字節來做到這一點,因爲沒有編碼會允許這樣做,而且我假設你無法控制數據的解碼。如果您的確實可以控制解碼以及編碼,您可以編寫自己的字符集,以便您可以將數據映射到正常的Java字符串(該字符串編碼爲UTF-16)並從其中取出。要對其進行編碼:

String str = new String(byteBuffer, MyCharSet); 

對其進行解碼:

byte[] byteBuffer = str.getBytes(MyCharSet); 
1

您可能想要類似new String(b, "charset"));的地方,其中charset被您要使用的編碼替換。我建議UTF-8,除了你的值不是有效的UTF-8。