簡體   English   中英

如何將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
        };
    }
}

請記住,此方法僅使用表示數字所需的字節數,這意味着如果數字較小,則使用較少的字節。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM