配列内のデータが実際には短いデータであるバイト配列があります。バイトはリトルエンディアンで並べられます:
3、1、-48、0、-15、0、36、1
短い値に変換すると、次の結果になります。
259、208、241、292
Javaでバイト値を対応する短い値に変換する簡単な方法はありますか?すべての上位バイトを取得して8ビットずつシフトするループを作成し、OR下位バイトがありますが、パフォーマンスが低下します。
Java.nio.ByteBuffer を使用すると、必要なエンディアンを指定できます: order() 。
ByteBufferには、byte、char、 getShort() 、 getInt() 、long、double ...としてデータを抽出するメソッドがあります。
以下に使用方法の例を示します。
ByteBuffer bb = ByteBuffer.wrap(byteArray);
bb.order( ByteOrder.LITTLE_ENDIAN);
while( bb.hasRemaining()) {
short v = bb.getShort();
/* Do something with v... */
}
/* Try this: */
public static short byteArrayToShortLE(final byte[] b, final int offset)
{
short value = 0;
for (int i = 0; i < 2; i++)
{
value |= (b[i + offset] & 0x000000FF) << (i * 8);
}
return value;
}
/* if you prefer... */
public static int byteArrayToIntLE(final byte[] b, final int offset)
{
int value = 0;
for (int i = 0; i < 4; i++)
{
value |= ((int)b[i + offset] & 0x000000FF) << (i * 8);
}
return value;
}