【发布时间】:2013-07-12 05:14:15
【问题描述】:
我需要这行 Java 代码:
Integer.toString(256 + (0xFF & arrayOfByte[i]), 16).substring(1)
转换为 C#,因为我不确定如何使用“0xFF”。
编辑 这是完整的代码:
MessageDigest localMessageDigest = MessageDigest.getInstance("SHA-256");
localMessageDigest.update(String.format(Locale.US, "%s:%s", new Object[] { paramString1, paramString2 }).getBytes());
byte[] arrayOfByte = localMessageDigest.digest();
StringBuffer localStringBuffer = new StringBuffer();
for (int i = 0; ; i++)
{
if (i >= arrayOfByte.length)
return localStringBuffer.toString();
localStringBuffer.append(Integer.toString(256 + (0xFF & arrayOfByte[i]), 16).substring(1));
}
【问题讨论】:
-
它应该只是
0xFF,因为 AFAIK 它太小并且没有设置 MSB,所以不应该遇到任何对unchecked的需求。 -
你是否至少能够遵循代码。您会看到 0xFF 是 arrayOfByte[i] 中任何内容的掩码。除非数组中的内容大于一个字节,否则我看不出使用它的原因。
-
我更新了它......也许在整个代码 sn-p 的上下文中它会更有意义
-
我打赌 0xFF 正在做一些隐式转换,因为 0xFF 可能被视为一个 int。我几乎可以肯定您可以将 0xFF 更改为 -1 并获得相同的结果。
-
@asafreedman - 从大局来看,你是对的。但是
(0xFF & arrayOfByte[i])和(-1 & arrayOfByte[i])不一样。