Преобразование значений массива байтов в маленьком концевом порядке в короткие значения
У меня есть байтовый массив, где данные в массиве - фактически короткие данные. Байты упорядочены в маленьком конце:
3, 1, -48, 0, -15, 0, 36, 1
Что при преобразовании в короткие значения приводит к:
259, 208, 241, 292
Есть ли простой способ в Java преобразовать значения байтов в соответствующие короткие значения? Я могу написать цикл, который просто берет каждый старший байт и сдвигает его на 8 бит, а OR - с его младшим байтом, но имеет удар по производительности.
Ответы
Ответ 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;
}