Java - 将int转换为4字节的字节数组?

Pet*_*y B 73 java buffer byte

可能重复:
将整数转换为字节数组(Java)

我需要存储一个缓冲区的长度,在一个4字节大的字节数组中.

伪代码:

private byte[] convertLengthToByte(byte[] myBuffer)
{
    int length = myBuffer.length;

    byte[] byteLength = new byte[4];

    //here is where I need to convert the int length to a byte array
    byteLength = length.toByteArray;

    return byteLength;
}
Run Code Online (Sandbox Code Playgroud)

实现这一目标的最佳方法是什么?请记住,我必须稍后将该字节数组转换回整数.

Wal*_*inz 124

您可以yourInt使用以下方法转换为字节ByteBuffer:

return ByteBuffer.allocate(4).putInt(yourInt).array();
Run Code Online (Sandbox Code Playgroud)

请注意,这样做时可能需要考虑字节顺序.

  • 如果它更好取决于你想用它做什么。它可能会快一点,但是当您想通过网络发送这些字节甚至写入文件时,让字节顺序取决于平台是一个禁忌。 (2认同)

小智 43

public static  byte[] my_int_to_bb_le(int myInteger){
    return ByteBuffer.allocate(4).order(ByteOrder.LITTLE_ENDIAN).putInt(myInteger).array();
}

public static int my_bb_to_int_le(byte [] byteBarray){
    return ByteBuffer.wrap(byteBarray).order(ByteOrder.LITTLE_ENDIAN).getInt();
}

public static  byte[] my_int_to_bb_be(int myInteger){
    return ByteBuffer.allocate(4).order(ByteOrder.BIG_ENDIAN).putInt(myInteger).array();
}

public static int my_bb_to_int_be(byte [] byteBarray){
    return ByteBuffer.wrap(byteBarray).order(ByteOrder.BIG_ENDIAN).getInt();
}
Run Code Online (Sandbox Code Playgroud)


Sta*_*aro 19

int integer = 60;
byte[] bytes = new byte[4];
for (int i = 0; i < 4; i++) {
    bytes[i] = (byte)(integer >>> (i * 8));
}
Run Code Online (Sandbox Code Playgroud)


Sor*_*row 18

这应该工作:

public static final byte[] intToByteArray(int value) {
    return new byte[] {
            (byte)(value >>> 24),
            (byte)(value >>> 16),
            (byte)(value >>> 8),
            (byte)value};
}
Run Code Online (Sandbox Code Playgroud)

代码来自这里.

编辑在这个帖子中给出了一个更简单的解决方案.