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

标签 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 的作用。感谢您的帮助。

最佳答案

分解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/

相关文章:

PHP: intval() 等价于数字 >= 2147483647

php - 在 PHP 中写入文本文件时整数被截断?

c++ - 我将如何将 AOB 从 Cheat Engine 修改为 C++?

java - InputStream.read() 返回的 int 值代表什么?

c++ - 从蓝牙地址读取 3 个字节?

java - 如何删除 java 中 url 字符串的前两段?

java - 按员工 ID 号对字符串数组进行排序

design-patterns - Java API观察者模式 :subject if extended

java - 查找另一个字符串中的多个字符串

c++ - 最多 2 位数字