将字节数组值以little endian顺序转换为short值

时间:2013-02-12 07:18:11

标签: java arrays byte endianness

我有一个字节数组,其中数组中的数据实际上是短数据。字节以little endian排序:

3,1,-48,0,-15,0,36,1

当转换为短值时会导致:

259,208,241,292

Java中有一种简单的方法可以将字节值转换为相应的短值吗?我可以编写一个循环,它只占用每个高字节并将其移位8位,并将其与低字节一起使用,但这会影响性能。

2 个答案:

答案 0 :(得分:44)

使用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... */
}

答案 1 :(得分:0)

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