在黑莓中将byte []转换为long

时间:2012-08-22 12:24:41

标签: blackberry

我从c.dot网络服务获取

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

我想将其转换为长值   我试过这个

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

我的结果为-543162368,实际值为41183

1 个答案:

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