我得到了用 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
的作用。感谢您的帮助。
最佳答案
分解Integer.toString((bytes[i] & 0xff) + 0x100, 16).substring(1)
:
- 添加
0x100
(十进制 256)将第 9 位设置为1
,从而保证结果的二进制数表示形式恰好为 9 位。您可以等效地执行& 0x100
。 - 设置位 8 后,
toString()
的结果将是 9 个字符长(零和一)。 substring(1)
有效地忽略第 8 位并输出低 8 位
那又怎样?
此代码在值上添加前导零,因此所有值都是 8 个二进制字符。没有办法让 Integer.toString()
单独做到这一点。
关于java - Java中字节到整数再到字符串的转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36491665/