2017-06-14 92 views
0

我試圖將一個字節數組轉換爲String並使用PrintWriter將它寫入文件(僅用mc檢查它的值,我需要String中的內容) 我的問題總結了:將字節數組轉換爲字符串

//-77 is "equivalent" to 179 or 0xb3 (i also tried those using ByteArrayOutputStream, where these are valid values) 
byte[] b = new byte[]{0,0,1,-77}; 

//I save the String to a txt, so i can check its value with midnight commander 
try( PrintWriter out = new PrintWriter("~/Desktop/output.txt")){ 
    out.println(new String(b)); 
} 

此output.txt的內容與MC十六進制: 00 00 01 EF | BF BD 0A
儘管它應該是:00 00 01 B3

這是什麼原因造成的?我想這是編碼,但我不知道應該使用什麼類型的編碼(我嘗試了一些Cp ###類型,但目前爲止它們都不起作用)。

UPDATE:
轉換成字符串像這樣將導致每個負字節:EF BF BD
因此,只有當無符號字節值作品小於128 所以,問題是我如何能代表在字符串中大於127的字節就像我用0-127字節做的那樣?

+2

您應該對字節進行編碼,而不是像試圖將它們當作字符串一樣使用它們。當字節數組是字符串的有效編碼時,應該只使用'new String(byte [])'。 – RealSkeptic

+0

HTTP可以處理字節。 –

+0

也許你的字節數組是有符號的。嘗試使用unisgned byte []。 – Pickle

回答

2

這將做到這一點。它會按預期輸出00 00 01 b3

FileOutputStream fos = new FileOutputStream("filename"); 
fos.write(b); 
fos.close(); 
+0

謝謝你的快速回答,它真的有竅門。 但寫它到一個txt只是爲了測試的目的,我需要它的值作爲一個字符串。 有沒有類似於FileOutputStream的字符串?或者我應該只讀回txt-s內容? (這看起來不太理想) – leviathan11

+1

@ leviathan11這是一個全新的問題。沒有人會將其視爲對另一個問題的回答的評論。 – EJP

+0

這完全是我原來的問題,但是因爲這是我在stackoverflow上的非常拳頭的文章,我無法真正撰寫它,所以它被編輯錯誤地指出了主題。 – leviathan11

相關問題