由于编写软件的很大一部分是关于重用现有解决方案的,因此首先应该始终查看语言/库的文档。
reverse = Integer.reverseBytes(x);
我不知道这个函数的效率如何,但是对于切换大量数字,a应该提供不错的性能。ByteBuffer
import java.nio.ByteBuffer;
import java.nio.ByteOrder;
...
int[] myArray = aFountOfIntegers();
ByteBuffer buffer = ByteBuffer.allocate(myArray.length*Integer.BYTES);
buffer.order(ByteOrder.LITTLE_ENDIAN);
for (int x:myArray) buffer.putInt(x);
buffer.order(ByteOrder.BIG_ENDIAN);
buffer.rewind();
int i=0;
for (int x:myArray) myArray[i++] = buffer.getInt(x);
正如 eversor 在注释中指出的那样,它是一种可选方法,可能并非在所有 Java 实现上都可用。ByteBuffer.putInt()
自主设计方法
Stacker的答案非常简洁,但可以对其进行改进。
reversed = (i&0xff)<<24 | (i&0xff00)<<8 | (i&0xff0000)>>8 | (i>>24)&0xff;
我们可以通过调整位掩码来摆脱括号。例如,等效于 。无论如何,最右边的括号是不必要的。(a & 0xFF)<<8
a<<8 & 0xFF00
reversed = i<<24 & 0xff000000 | i<<8 & 0xff0000 | i>>8 & 0xff00 | i>>24 & 0xff;
由于左移位移位为零位,因此第一个掩码是多余的。我们可以通过使用逻辑移位运算符来摆脱最右边的掩码,该运算符仅以零位移位。
reversed = i<<24 | i>>8 & 0xff00 | i<<8 & 0xff0000 | i>>>24;
这里的运算符优先,有关移位运算符的坚毅细节在Java语言规范中