Преобразование значений байтового массива в порядке с прямым порядком байтов в короткие значения
У меня есть байтовый массив, где данные в массиве на самом деле короткие данные. Байты упорядочены с прямым порядком байтов:
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;
}