2

我从 c.dot 网络服务获取

byte[] data = new byte[] {-33, -96,0, 0, 0,0,0,0};

我想把它转换成长值我试过这个

long result = (long)ByteBuffer.wrap(index).getInt();

我得到的结果是-543162368实际值是41183

4

1 回答 1

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现在应该包含该值。

于 2012-08-22T13:16:40.710 回答