如何在java中正确获取little-endian整数

时间:2016-02-22 18:11:28

标签: java integer bytearray endianness

我需要将64位小端整数作为字节数组,其中高32位归零,低32位包含一些整数,假设它是51。

现在我这样做了:

 byte[] header = ByteBuffer
            .allocate(8)
            .order(ByteOrder.LITTLE_ENDIAN)
            .putInt(51)
            .array();

但我不确定这是正确的方法。我做得对吗?

1 个答案:

答案 0 :(得分:3)

尝试以下方法怎么样:

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位。

我忽略了这里的旗帜,你可以单独传递这些旗帜。我已经改变了答案,使缓冲区的位置放在大小的末尾。