java arrays byte endianness

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