如何在 java 中正确获取小端整数
How to properly get little-endian integer in java
我需要将 64 位小端整数作为字节数组,高 32 位为零,低 32 位包含一些整数,假设它是 51。
现在我是这样做的:
byte[] header = ByteBuffer
.allocate(8)
.order(ByteOrder.LITTLE_ENDIAN)
.putInt(51)
.array();
但我不确定这样做是否正确。我做对了吗?
尝试以下方法如何:
private static byte[] encodeHeader(long size) {
if (size < 0 || size >= (1L << Integer.SIZE)) {
throw new IllegalArgumentException("size negative or larger than 32 bits: " + size);
}
byte[] header = ByteBuffer
.allocate(Long.BYTES)
.order(ByteOrder.LITTLE_ENDIAN)
.putInt((int) size)
.array();
return header;
}
个人觉得这样更清晰,可以使用完整的32位。
我忽略了这里的标志,你可以单独传递它们。我改变了答案,将缓冲区的位置放在大小的末尾。
我需要将 64 位小端整数作为字节数组,高 32 位为零,低 32 位包含一些整数,假设它是 51。
现在我是这样做的:
byte[] header = ByteBuffer
.allocate(8)
.order(ByteOrder.LITTLE_ENDIAN)
.putInt(51)
.array();
但我不确定这样做是否正确。我做对了吗?
尝试以下方法如何:
private static byte[] encodeHeader(long size) {
if (size < 0 || size >= (1L << Integer.SIZE)) {
throw new IllegalArgumentException("size negative or larger than 32 bits: " + size);
}
byte[] header = ByteBuffer
.allocate(Long.BYTES)
.order(ByteOrder.LITTLE_ENDIAN)
.putInt((int) size)
.array();
return header;
}
个人觉得这样更清晰,可以使用完整的32位。
我忽略了这里的标志,你可以单独传递它们。我改变了答案,将缓冲区的位置放在大小的末尾。