Converting byte array values in little endian order to short values
我有一个字节数组,其中数组中的数据实际上是短数据。字节按小尾数排序:
3,1,-48,0,-15,0,36,1
当转换为短值时会导致:
259、208、241、292
Java中有一种简单的方法将字节值转换为相应的短值吗?我可以编写一个循环,它只获取每个高字节,并将其移位8位,或者用它的低字节来移位,但这会影响性能。
通过java.nio.bytebuffer,您可以指定所需的endianness:order()。
ByteBuffer有提取数据的方法,如byte、char、getshort()、getint()、long、double…
下面是一个如何使用它的示例:
1 2 3 4 5 6 | ByteBuffer bb = ByteBuffer.wrap(byteArray); bb.order( ByteOrder.LITTLE_ENDIAN); while( bb.hasRemaining()) { short v = bb.getShort(); /* Do something with v... */ } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | /* 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; } |