我从 c.dot 网络服务获取
byte[] data = new byte[] {-33, -96,0, 0, 0,0,0,0};
我想把它转换成长值我试过这个
long result = (long)ByteBuffer.wrap(index).getInt();
我得到的结果是-543162368
实际值是41183
我从 c.dot 网络服务获取
byte[] data = new byte[] {-33, -96,0, 0, 0,0,0,0};
我想把它转换成长值我试过这个
long result = (long)ByteBuffer.wrap(index).getInt();
我得到的结果是-543162368
实际值是41183
首先,您要调用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
现在应该包含该值。