文字列からByte[]
次の Java コードを使用するように変換しようとします。
String source = "0123456789";
byte[] byteArray = source.getBytes("UTF-16");
長さ 22 バイトのバイト配列を取得しますが、このパディングがどこから来るのかわかりません。長さ 20 の配列を取得するにはどうすればよいですか?
アレクサンダーの答えは、なぜそこにあるのかを説明していますが、それを取り除く方法は説明していません。エンコード名で必要なエンディアンを指定するだけです。
String source = "0123456789";
byte[] byteArray = source.getBytes("UTF-16LE"); // Or UTF-16BE
最初の 2 バイトがByte Order Markである可能性があります。エンコードで使用される各 16 ビット ワードのバイトの順序を指定します。
バイトを 16 進数で出力して、余分な 2 バイトが追加された場所を確認してみてください。それらは先頭ですか、それとも末尾ですか?
先頭 (0xFEFF) にバイト オーダー マーカーがあることを選択します。これにより、バイト配列を消費 (受信) する人は、エンコーディングがリトル エンディアンかビッグ エンディアンかを認識できます。
UTF の先頭には、このストリームが特定の形式でエンコードされていることを示すバイト オーダー マーカーがあります。他のユーザーが指摘したように、
1 バイト目は 0XFE
2 バイト目は 0XFF
残りのバイトは
0
48
0
49
0
50
0
51
0
52
0
53
0
54
0
55
0
56
0
57