バイト配列bytes
を文字列に変換しました。しかし、文字列内のバイトを計算すると、正しい答えが得られません。のサイズbytes
は 125 ですが、129 になっています。コードは以下のとおりです。
String s2= null;
try {
System.out.println(bytes.length); //This gives 125 as answer
s2 = new String(bytes,"UTF-8");
System.out.println(s2.getBytes("UTF-8").length); //But this gives 129 instead of 125
}
catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
上記のコードの何が問題になっていますか?
編集:以下の回答に基づいてbytes
、間違った形式でエンコードされています。bytes
以下に示すように初期化が行われた場合bytes
、余分なデータを失う (または得る) ことなく文字列に変換する方法は?
byte[] bytes=new byte[125];
for (int i = 0; i < 125; i++) {
bytes[bytes.length - i / 8 - 1] |= 1 << (i % 8);
}
更新:上記のコードでシフト操作を削除すると、正しい出力が得られます。シフトの問題は何ですか?