我得到一个整数:1695609641
当我使用方法:
String hex = Integer.toHexString(1695609641);
system.out.println(hex);
给:
6510f329
但是我想要一个字节数组:
byte[] bytearray = new byte[] { (byte) 0x65, (byte)0x10, (byte)0xf3, (byte)0x29};
我怎么做这个?
我得到一个整数:1695609641
当我使用方法:
String hex = Integer.toHexString(1695609641);
system.out.println(hex);
给:
6510f329
但是我想要一个字节数组:
byte[] bytearray = new byte[] { (byte) 0x65, (byte)0x10, (byte)0xf3, (byte)0x29};
我怎么做这个?
当前回答
使用番石榴:
byte[] bytearray = Ints.toByteArray(1695609641);
其他回答
org.apache.hadoop.hbase.util.Bytes类有很多方便的byte[]转换方法,但是你可能不想仅仅为了这个目的就把整个HBase jar添加到你的项目中。令人惊讶的是,这种方法不仅在JDK中缺少AFAIK,而且在明显的库中也缺少AFAIK,比如commons io。
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;
}
因为一般情况下,你会想在稍后将这个数组转换回int类型,这里有一些方法可以将一个int类型的数组转换为字节类型的数组,反之亦然:
public static byte[] convertToByteArray(final int[] pIntArray)
{
final byte[] array = new byte[pIntArray.length * 4];
for (int j = 0; j < pIntArray.length; j++)
{
final int c = pIntArray[j];
array[j * 4] = (byte)((c & 0xFF000000) >> 24);
array[j * 4 + 1] = (byte)((c & 0xFF0000) >> 16);
array[j * 4 + 2] = (byte)((c & 0xFF00) >> 8);
array[j * 4 + 3] = (byte)(c & 0xFF);
}
return array;
}
public static int[] convertToIntArray(final byte[] pByteArray)
{
final int[] array = new int[pByteArray.length / 4];
for (int i = 0; i < array.length; i++)
array[i] = (((int)(pByteArray[i * 4]) << 24) & 0xFF000000) |
(((int)(pByteArray[i * 4 + 1]) << 16) & 0xFF0000) |
(((int)(pByteArray[i * 4 + 2]) << 8) & 0xFF00) |
((int)(pByteArray[i * 4 + 3]) & 0xFF);
return array;
}
注意,由于符号传播等原因,在转换回int时需要“& 0xFF…”。
下面的块至少可以在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;
}
BigInteger.valueOf(1695609641).toByteArray()