我从c.dot网络服务获取
byte[] data = new byte[] {-33, -96,0, 0, 0,0,0,0};
我想将其转换为长值 我试过这个
long result = (long)ByteBuffer.wrap(index).getInt();
我的结果为-543162368
,实际值为41183
答案 0 :(得分:1)
首先,您要在缓冲区上调用getLong()
而不是getInt()
。
但是,您收到的数据是little-endian,这意味着它首先以低位字节开头。 ByteBuffers
默认构造为大端序。您需要将订单设置为LITTLE_ENDIAN
才能获得正确的值。
ByteBuffer buffer = ByteBuffer.wrap(index)
buffer.order(ByteOrder.LITTLE_ENDIAN);
long result = buffer.getLong();
由于您显然无法设置字节顺序或使用getLong,因此您需要这样做:
// Reverse array
for (int i = 0; i < 4; ++i)
{
byte temp = data[i];
data[i] = data[8-i];
data[8-i] = temp;
}
// Get two ints and shift the first int into the high order bytes
// of the result.
ByteBuffer buffer = ByteBuffer.wrap(data);
long result = ((long)buffer.getInt()) << 32;
result |= (long)buffer.getInt();
result
现在应该包含值。