4

現在、リトルエンディアンのバイナリ データを扱っていますが、奇数のバイト数を整数値に変換する必要があるところまで来ました。

このByteBufferクラスを使用すると、関数を使用して int と long を完全に読み取ることができ、getInt() getLong()それぞれ 4 バイトと 8 バイトを読み取ることができます。

ただし、この例では、3 バイトを読み取り、それらから int を作成する必要があります。(2 バイト + 1 バイト)を試してみましgetShort + get()たが、それが正しい方法だとは思いません。

正しい int 値を取得するには、バイトを一緒にビットシフトする必要があると思いますが、ビットシフトについては常に少し混乱します。

また、bytebuffer クラスが奇数バイトを読み取る機能を提供していると思っていたのですが、そうではないようです。

これを行う 1 つの方法は、長さが 3 バイトの byte[] を作成し、その中に 3 バイトを入れてから、その周りにバイトバッファーをラップし、そこから int を読み取ることです。しかし、それは多くの余分なコードのようです。

提案やアドバイスをいただければ幸いです。

ありがとう

4

2 に答える 2

6

経由で 3 バイトを取得します。

byte[] tmp = new byte[3];
byteBuffer.get(tmp);

intその後、経由に変換します

int i = tmp[0] << 16 | tmp[1] << 8 | tmp[2];

また

int i = tmp[2] << 16 | tmp[1] << 8 | tmp[0];

あなたのエンディアンに応じて。

于 2013-01-29T13:01:11.523 に答える