2013年1月25日 星期五

在 Java 中把 primitive data type 轉成 byte array

參考 [1] 的方法,[1] 的回應裡有好幾種方法,有使用 NIO 的 ByteBuffer 或使用 BigInteger
但也有人說他的方法比其他使用 "magic" ByteBuffer 好~。
我也不知道哪種好,所以都先記錄起來 XD

這裡記錄的程式碼是直接轉錄 [1] 的,所以都是把 Inteter 轉成 byte array。

方法一:
byte[] bytes = ByteBuffer.allocate(4).putInt(1695609641).array();

for (byte b : bytes) {
  System.out.format("0x%x ", b);
}

方法二:
public static final byte[] intToByteArray(int value) {
  return new byte[] {
    (byte)(value >>> 24),
    (byte)(value >>> 16),
    (byte)(value >>> 8),
    (byte)value};
}

方法三:
BigInteger.valueOf(1695609641).toByteArray()

如果要把 byte array 轉回 integer,可以參考 [4] 的回應。
ByteBuffer.wrap(bytes).getInt();

另外~上述的程式碼都用長度為 4 的 byte array,是因為 Java 的 Integer 長度是 32-bit。
Primitive Data Type 的長度要複習的話,可以參考 [2]。

參考資料:
1、Java integer to byte array
2、The Java Tutorial: Primitive Data Types
3、How to convert a Java Long to byte[] for Cassandra?
4、How to convert a byte array to its numeric value (Java)?

沒有留言: