2
IAM从c.dot网的Web服务越来越转换字节[]为长黑莓
byte[] data = new byte[] {-33, -96,0, 0, 0,0,0,0};
我想这个转换为长期价值 我想这
long result = (long)ByteBuffer.wrap(index).getInt();
我得到结果为-543162368
其实际值为41183
IAM从c.dot网的Web服务越来越转换字节[]为长黑莓
byte[] data = new byte[] {-33, -96,0, 0, 0,0,0,0};
我想这个转换为长期价值 我想这
long result = (long)ByteBuffer.wrap(index).getInt();
我得到结果为-543162368
其实际值为41183
首先你想要t o在缓冲区上调用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
现在应该包含的值。
但黑莓手机不支持getLong(),黑莓手机也不支持ByteOrder – user1203673
手动反转该数组,然后调用get int两次,将第一个结果强制转换为long并将其移动32位,并将其与第二次通话的结果。 – Dervall
我按照你建议的先生德沃尔,但亚姆得到的结果为零,但我试过这样,并得到结果长l = 0; (int i = 0; i <8; i ++){ \t \t \t \t \t L^=(长)字节[I] & 0xff; \t \t} \t \t返回升; – user1203673