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

Java中字节到整数再到字符串的转换,java,integer,byte,tostring,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).sub

我得到了一个用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));
byte[]bytes=md.digest(textToHash.getBytes());
StringBuilder sb=新的StringBuilder();

对于(int i=0;i分解
Integer.toString((字节[i]&0xff)+0x100,16)。子字符串(1)

  • 添加
    0x100
    (256位小数)将第9位设置为
    1
    ,这保证结果的二进制数表示形式正好是9位。您可以等效地执行
    &0x100
  • 设置位8后,
    toString()
    的结果将为9个字符长(0和1)
  • 子串(1)
    有效忽略位8并输出较低的8位
那又怎样


此代码将前导零放在值上,因此所有值正好是8个二进制字符。无法使
为整数。toString()
单独执行此操作。

谢谢,但那是什么呢,16?
16
是基数-即基数16,即十六进制。代码基本上以
1
的形式输出
“01”
,而不是
“1”
谢谢。我在论坛上也找到了一种更简单的方法:sb.append(String.format(“%02X”,bytes[I]);@nann是的,使用格式是首选方法,但你没有问更好的方法,你问的是“这段代码意味着什么”。你说得对。我只是想向那些以后可能阅读这篇文章的人提一下。再次感谢。