关于java:将little endian顺序的字节数组值转换为short值

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