Java整数到字节数组

我得到一个整数: 1695609641

当我使用方法:

 String hex = Integer.toHexString(1695609641); system.out.println(hex); 

得到:

 6510f329 

但我想要一个字节数组:

 byte[] bytearray = new byte[] { (byte) 0x65, (byte)0x10, (byte)0xf3, (byte)0x29}; 

我怎样才能做到这一点?

使用Java NIO的ByteBuffer非常简单:

 byte[] bytes = ByteBuffer.allocate(4).putInt(1695609641).array(); for (byte b : bytes) { System.out.format("0x%x ", b); } 

输出:

 0x65 0x10 0xf3 0x29 

怎么样:

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

这个想法不是我的 。 我从dzone.com上的一些post中看到了它。

BigInteger.valueOf(1695609641).toByteArray()

 byte[] IntToByteArray( int data ) { byte[] result = new byte[4]; result[0] = (byte) ((data & 0xFF000000) >> 24); result[1] = (byte) ((data & 0x00FF0000) >> 16); result[2] = (byte) ((data & 0x0000FF00) >> 8); result[3] = (byte) ((data & 0x000000FF) >> 0); return result; } 

使用番石榴 :

 byte[] bytearray = Ints.toByteArray(1695609641); 
 byte[] conv = new byte[4]; conv[3] = (byte) input & 0xff; input >>= 8; conv[2] = (byte) input & 0xff; input >>= 8; conv[1] = (byte) input & 0xff; input >>= 8; conv[0] = (byte) input; 

下面的块至less用于通过UDP发送一个int。

int到字节数组:

 public byte[] intToBytes(int my_int) throws IOException { ByteArrayOutputStream bos = new ByteArrayOutputStream(); ObjectOutput out = new ObjectOutputStream(bos); out.writeInt(my_int); out.close(); byte[] int_bytes = bos.toByteArray(); bos.close(); return int_bytes; } 

字节数组为int:

 public int bytesToInt(byte[] int_bytes) throws IOException { ByteArrayInputStream bis = new ByteArrayInputStream(int_bytes); ObjectInputStream ois = new ObjectInputStream(bis); int my_int = ois.readInt(); ois.close(); return my_int; } 
 public static byte[] intToBytes(int x) throws IOException { ByteArrayOutputStream bos = new ByteArrayOutputStream(); DataOutputStream out = new DataOutputStream(bos); out.writeInt(x); out.close(); byte[] int_bytes = bos.toByteArray(); bos.close(); return int_bytes; } 

org.apache.hadoop.hbase.util.Bytes类有很多方便的byte []转换方法,但是您可能不想将整个HBase jar添加到您的项目中。 令人惊讶的是,这种方法不仅缺less来自JDK的AFAIK,而且还来自像commons io这样的明显的库。

我的尝试:

 public static byte[] toBytes(final int intVal, final int... intArray) { if (intArray == null || (intArray.length == 0)) { return ByteBuffer.allocate(4).putInt(intVal).array(); } else { final ByteBuffer bb = ByteBuffer.allocate(4 + (intArray.length * 4)).putInt(intVal); for (final int val : intArray) { bb.putInt(val); } return bb.array(); } } 

有了它,你可以做到这一点:

 byte[] fourBytes = toBytes(0x01020304); byte[] eightBytes = toBytes(0x01020304, 0x05060708); 

全class在这里: https : //gist.github.com/superbob/6548493 ,它支持从短或长的初始化

 byte[] eightBytesAgain = toBytes(0x0102030405060708L); 
 integer & 0xFF 

为第一个字节

 (integer >> 8) & 0xFF 

对于第二个循环等,写入一个预先分配的字节数组。 有点混乱,不幸的。