[英]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));
[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.