1. ホーム

[解決済み】バイト配列を文字列に変換する方法と、逆に文字列を文字列に変換する方法は?

2022-03-30 20:42:47

質問

Androidでバイト配列を文字列に変換しなければならないのですが、バイト配列に負の値が含まれています。

その文字列を再度バイト配列に変換すると、元のバイト配列の値とは異なる値が取得されます。

どうすれば正しく変換されるのでしょうか?私が変換に使っているコードは以下の通りです。

// Code to convert byte arr to str:
byte[] by_original = {0,1,-2,3,-4,-5,6};
String str1 = new String(by_original);
System.out.println("str1 >> "+str1);

// Code to convert str to byte arr:
byte[] by_new = str1.getBytes();
for(int i=0;i<by_new.length;i++) 
System.out.println("by1["+i+"] >> "+str1);

この問題で行き詰まっています。

どうすればいいですか?

バイト配列には、何らかのエンコーディングが必要です。負の値がある場合、エンコーディングはASCIIである必要はありません。これがわかれば、バイトの集合を文字列に変換することができます。

byte[] bytes = {...}
String str = new String(bytes, StandardCharsets.UTF_8); // for UTF-8 encoding

使用できるエンコーディングはたくさんあります。 Oracle javadocs .