0

私は Java Multimedia IO Project に取り組んでいますが、DWORD を書き込もうとすると、4 バイトではなく 16 バイトになるという問題が発生しました。次のコードを使用して、4 文字の文字列を 16 ビットのリトルエンディアン バイト配列に変換しています。

word.getBytes("UTF-32LE")

配列が 4 バイトよりも長い理由を教えてください。

ありがとう、リアム。

4

2 に答える 2

1

1 文字あたり 4 バイトの形式 (UTF-32) にエンコードしているため、こちらの説明を参照してください

文字あたりのバイト数にしたい場合は、「UTF-32LE」の代わりに「UTF-8」を使用してください

于 2012-11-10T05:17:59.553 に答える
0

OK、デバッグを行ったところ、「word.getBytes("UTF-32LE")」から直接バイトを書き込んでいるときに、余分な 12 バイトが追加されていることがわかりました。

私がそうするなら、"RIFF".getBytes("UTF-32LE")R000I000F000F000はファイルに入るので、次のコードを使用してそれらのゼロを削除しました。

    byte[] bits = word.getBytes("UTF-32LE");
    byte[] dword = new byte[4];
    System.arraycopy(bits, 0, dword, 0, 1);
    System.arraycopy(bits, 4, dword, 1, 1);
    System.arraycopy(bits, 8, dword, 2, 1);
    System.arraycopy(bits, 12, dword, 3, 1);
    write(dword);

私が得ていた問題がバグだったのか、それともそれが返されたのかはわかりません。

于 2012-11-10T05:17:07.703 に答える