【问题标题】:How to convert int to byte[]?如何将 int 转换为 byte[]?
【发布时间】:2017-03-18 07:53:56
【问题描述】:

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

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

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

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

【问题讨论】:

  • 你在哪一行得到错误?
  • buff.get(字节)

标签: java arrays int type-conversion bytebuffer


【解决方案1】:

这是我实现它的方法:

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

请记住,这种方法只使用所需的字节数来表示数字,这意味着如果数字很小,则使用更少的字节数。

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

      不需要调用 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

      【讨论】:

        【解决方案4】:

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

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

        【讨论】:

          猜你喜欢
          • 2012-02-05
          • 1970-01-01
          • 2010-11-08
          • 2019-08-08
          • 2011-06-24
          • 1970-01-01
          • 2020-02-03
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多