Подтвердить что ты не робот

Преобразование значений массива байтов в маленьком концевом порядке в короткие значения

У меня есть байтовый массив, где данные в массиве - фактически короткие данные. Байты упорядочены в маленьком конце:

3, 1, -48, 0, -15, 0, 36, 1

Что при преобразовании в короткие значения приводит к:

259, 208, 241, 292

Есть ли простой способ в Java преобразовать значения байтов в соответствующие короткие значения? Я могу написать цикл, который просто берет каждый старший байт и сдвигает его на 8 бит, а OR - с его младшим байтом, но имеет удар по производительности.

4b9b3361

Ответ 1

С java.nio.ByteBuffer вы можете указать желаемую сущность: порядок().

ByteBuffer имеет методы для извлечения данных в виде байта, char, getShort(), getInt(), длинный, двойной...

Вот пример того, как его использовать:

ByteBuffer bb = ByteBuffer.wrap(byteArray);
bb.order( ByteOrder.LITTLE_ENDIAN);
while( bb.hasRemaining()) {
   short v = bb.getShort();
   /* Do something with v... */
}

Ответ 2

 /* 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;
 }