我有一个字节数组,其中数组中的数据实际上是短整型数据。这些字节按小端序排列:
3, 1, -48, 0, -15, 0, 36, 1
将其转换为short值后得到:
259, 208, 241, 292
在Java中是否有简单的方法将字节值转换为相应的short值?我可以编写一个循环,只需取出每个高字节并将其左移8位并与其低字节进行OR运算,但这会影响性能。
我有一个字节数组,其中数组中的数据实际上是短整型数据。这些字节按小端序排列:
3, 1, -48, 0, -15, 0, 36, 1
将其转换为short值后得到:
259, 208, 241, 292
在Java中是否有简单的方法将字节值转换为相应的short值?我可以编写一个循环,只需取出每个高字节并将其左移8位并与其低字节进行OR运算,但这会影响性能。
使用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... */
}
getLong()
按照问题中的示例数据将两个字节转换。你需要调用getShort()
来完成这个任务。 - Jon Skeet /* 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;
}