反向字节顺序为long

Avi*_*ram 3 java bit-manipulation bitwise-operators

我有一个long变量,我需要反转它的字节顺序.例如:B1, B2, ... , B8我应该返回一个包含的长整数B8, B7, ..., B1.如何通过使用按位运算来实现?

Ser*_*lis 6

你可以使用Long.reverseBytes(长)

或者对于包含按位运算的更多方法,您可以参考此堆栈溢出问题

这是你可能喜欢的另一种方法,我仍然会推荐上述方法,但它比你可以轻易犯错的位置更好.

字节缓冲区

byte[] bytes = ByteBuffer.allocate(8).putLong(someLong).array();
for (int left = 0, right = bytes.length - 1; left < right; ++left, --right) {
    byte temp = bytes[left]; 
    bytes[left]  = bytes[right]; 
    bytes[right] = temp;
}
Run Code Online (Sandbox Code Playgroud)

我试图引导你远离按位解决方案,因为它们很麻烦,如果你不知道你在做什么就很容易陷入困境......但是按位看起来像这样:

byte[] bytes = new byte[8];

// set the byte array from smallest to largest byte
for(int i = 0; i < 8; ++i) {
    byte[i] = (your_long >> i*8) & 0xFF;
}

// build the new long from largest to smallest byte (reversed)
long l = ((buf[0] & 0xFFL) << 56) |
         ((buf[1] & 0xFFL) << 48) |
         ((buf[2] & 0xFFL) << 40) |
         ((buf[3] & 0xFFL) << 32) |
         ((buf[4] & 0xFFL) << 24) |
         ((buf[5] & 0xFFL) << 16) |
         ((buf[6] & 0xFFL) <<  8) |
         ((buf[7] & 0xFFL) <<  0) ;
Run Code Online (Sandbox Code Playgroud)