web-dev-qa-db-ja.com

リトルエンディアン順のバイト配列値を短い値に変換する

配列内のデータが実際には短いデータであるバイト配列があります。バイトはリトルエンディアンで並べられます:

3、1、-48、0、-15、0、36、1

短い値に変換すると、次の結果になります。

259、208、241、292

Javaでバイト値を対応する短い値に変換する簡単な方法はありますか?すべての上位バイトを取得して8ビットずつシフトするループを作成し、OR下位バイトがありますが、パフォーマンスが低下します。

21
AndroidDev

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... */
}
46
Aubin
 /* 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;
 }
0
Patrick Paulin