Преобразование значений байтового массива в порядке с прямым порядком байтов в короткие значения

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

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

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

259, 208, 241, 292

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

2 ответа

Решение

С 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;
 }
Другие вопросы по тегам