【问题标题】:What does (b & 0xff) mean? [duplicate](b & 0xff) 是什么意思? [复制]
【发布时间】:2013-08-15 10:30:21
【问题描述】:

使用 Java,我在 MessageDigest 实例上使用 SHA1 将字符串值转换为哈希值。我现在已经创建了一个哈希对象:

MessageDigest md = MessageDigest.getInstance("SHA1");
byte[] hash = md.digest(password.getBytes("UTF-8"));

我不明白的部分是 b & 0xff 在下面的代码中是什么意思:

StringBuilder sb = new StringBuilder(2*hash.length);
for(byte b : hash) {
   sb.append(String.format("%02x", b & 0xff));
}

我知道 %02x 的意思是指定一个格式,其中有两个字符使用十六进制,但我不知道第二个参数是什么,它对每个字节的作用或它的含义。一个简单的解释会很棒! :-)

【问题讨论】:

  • 随机附注:如果你可以使用第三方库,这整件事就是Hashing.sha1().hashString(password, Charsets.UTF_8).toString()Guava 的一行。

标签: java hash hex sha1


【解决方案1】:

那是bitwise AND operatorb & 0xff 获取 b 的最后一个字节。由于b 已经是byte,我看不出有任何意义:String.format 的结果是一样的。

【讨论】:

  • 查看重复的答案,了解为什么按位与在 OP 的上下文中很有用。另外,b 是一个字节。
  • 感谢大家回答我的问题,非常有帮助。
  • 此处“b & 0xff”的一个实用程序是它的工作方式与格式符号当前是 %02x 还是 %03d 无关。
猜你喜欢
  • 2014-03-26
  • 2014-12-21
  • 1970-01-01
  • 1970-01-01
  • 2021-11-25
  • 2017-02-02
  • 2013-12-16
  • 2019-09-12
  • 2015-01-22
相关资源
最近更新 更多