我有一个Integer列表
List<Integer> listInt;
我想为listInt生成一个MD5哈希,我应该如何处理这个问题,我知道我必须使用
MessageDigest.getInstance("MD5").digest(byte[])
如何将listInt转换为字节。
答案 0 :(得分:2)
您需要将每个整数值转换为4个字节,形成长度为4*listInt.size()
个字节的字节数组。
这样做的一种方法是使用NIO的ByteBuffer类:
ByteBuffer buf = ByteBuffer.allocate(4*listInt.size());
buf.order(ByteOrder.BIG_ENDIAN);
for (int i = 0; i < listInt.size(); ++i)
buf.putInt(listInt.get(i));
byte[] barr = buf.array();
请注意,将整数数组转换为字节数组有两种常用方法。然而,差异只是Endianness的选择。有些人选择计算整数的Big Endian字节表示;其他人选择计算整数的小Endian表示。只要您一致地计算每个整数的字节表示,选择哪种方法都无关紧要。
答案 1 :(得分:1)
首先创建一个将int转换为字节数组的方法:
public static final byte[] intToByteArray(int value)
{
return new byte[] { (byte)(value >>> 24), (byte)(value >> 16 & 0xff), (byte)(value >> 8 & 0xff), (byte)(value & 0xff) };
}
然后使用ByteArrayOutputStream。
ByteArrayOutputStream baos = new ByteArrayOutputStream();
for (int i = 0; i < listInt.size(); i++)
{
baos.write(intToByteArray(listInt[i]), 0, 4);
}
然后,您将获得完整的字节数组,以执行md5哈希:
byte[] fullByteArray = baos.toByteArray();
答案 2 :(得分:0)
byte data[] = new byte[listInt.size()*4];
for (int i = 0; i < listInt.size(); i++) {
data[i*4] = new Integer(listInt.get(i) >> 24).byteValue();
data[i*4+1] = new Integer(listInt.get(i) >> 16).byteValue();
data[i*4+2] = new Integer(listInt.get(i) >> 8).byteValue();
data[i*4+3] = listInt.get(i).byteValue();
}
示例代码正在运行:http://ideone.com/YJZVj