字节到整数然后到Java中的字符串转换

时间:2016-04-08 04:41:51

标签: java integer byte tostring

我在Java中获得了MD5哈希生成的代码。它以字节数组“bytes”生成散列,然后转换为整数,然后转换为字符串,如下所示:

byte[] bytes=md.digest(textToHash.getBytes());

StringBuilder sb=new StringBuilder();
for(int i=0;i<bytes.length;i++)
sb.append(Integer.toString((bytes[i] & 0xff) + 0x100, 16).substring(1));

我理解bytes[i] & 0xff将字节转换为32位长度的整数,将字节复制到整数的最低有效字节:

What does value & 0xff do in Java?

但是我无法理解上面代码第4行括号中+ 0x100, 16的作用。感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

分解Integer.toString((bytes[i] & 0xff) + 0x100, 16).substring(1)

  • 添加0x100(十进制256)将第9位设置为1,这可以保证结果的二进制数表示恰好为9位。您可以等效地& 0x100
  • 设置第8位后,toString()的结果将是9个字符长(零和1)。
  • substring(1)实际上忽略了第8位并输出低8位

那又怎样?

此代码在值上放置前导零,因此所有值都是8个二进制字符。没有办法让Integer.toString()单独做到这一点。