如何将int转换为byte[]?

How to convert int to byte[]?

我尝试将 int 转换为 byte[] 并为此编写了以下内容:

byte[] bytes = new byte[4];
ByteBuffer buff = ByteBuffer.allocate(4);
buff.putInt(1222);
buff.get(bytes);

但结果我 java.nio.BufferOverflowException 没有详细信息。

至于我,代码是有效的。怎么了?如何把int转换成byte[]?

您在放入数据后忘记flip()您的缓冲区。

int放入缓冲区后,该位置在缓冲区的末尾。尝试读取数据导致 BufferUnderflowException(不是溢出),因为缓冲区中没有剩余字节可供读取。

不需要调用 flip() 的类似答案。

byte[] bytes = new byte[4];
ByteBuffer.wrap(bytes).putInt(0x12345678);
System.out.println(Arrays.toString(bytes));

打印http://ideone.com/Ab4Z4V

[18, 52, 86, 120]

这是 0x12、0x34、0x56 和 0x78

和你自己的解决方案类似,但更简洁一点,结果直接在字节数组中。

    byte[] bytes = new byte[4];
    // BigEndian
    ByteBuffer.wrap(bytes).putInt(1222);
    // LittleEndian
    ByteBuffer.wrap(bytes).order(LITTLE_ENDIAN).putInt(1222);

这是我实现它的方法:

public static byte[] intToByteArray(int value) {
    if ((value >>> 24) > 0) {
        return new byte[]{
            (byte) (value >>> 24),
            (byte) (value >>> 16),
            (byte) (value >>> 8),
            (byte) value
        };
    } else if ((value >> 16) > 0) {
        return new byte[]{
            (byte) (value >>> 16),
            (byte) (value >>> 8),
            (byte) value
        };
    } else if ((value >> 8) > 0) {
        return new byte[]{
            (byte) (value >>> 8),
            (byte) value
        };
    } else {
        return new byte[]{
            (byte) value
        };
    }
}

请记住,此方法仅使用所需的字节数来表示数字,这意味着如果数字较小,则使用较少的字节。