如何将int转换为byte []?

时间:2016-11-04 13:01:44

标签: java arrays int type-conversion bytebuffer

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

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

但结果我得到了没有详细消息的java.nio.BufferOverflowException。

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

4 个答案:

答案 0 :(得分:6)

类似的答案,不需要调用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

答案 1 :(得分:5)

将数据输入后,您忘记了flip()缓冲区。

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

答案 2 :(得分:2)

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

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

答案 3 :(得分:2)

这是我实现它的方法:

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
        };
    }
}

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