java - Conversión de valores de matriz de bytes en orden de little endian a valores cortos
arrays endianness (2)
Con java.nio.ByteBuffer puede especificar la endianidad que desea: order() .
ByteBuffer tiene métodos para extraer datos como byte, char, getShort() , getInt() , long, double ...
Aquí hay un ejemplo de cómo usarlo:
ByteBuffer bb = ByteBuffer.wrap(byteArray);
bb.order( ByteOrder.LITTLE_ENDIAN);
while( bb.hasRemaining()) {
short v = bb.getShort();
/* Do something with v... */
}
Tengo una matriz de bytes donde los datos de la matriz son en realidad datos cortos. Los bytes están ordenados en little endian:
3, 1, -48, 0, -15, 0, 36, 1
Que cuando se convierte a valores cortos resulta en:
259, 208, 241, 292
¿Existe una forma sencilla en Java para convertir los valores de bytes a sus valores cortos correspondientes? Puedo escribir un bucle que solo toma cada byte alto y lo desplaza 8 bits y O con su byte bajo, pero eso tiene un impacto en el rendimiento.
/* 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;
}