当我重写遗留应用程序时,我正在将Java库转换为C#,我需要一些帮助。我需要了解这条线是用Java做:将Java哈希转换为C#并需要帮助了解Java
sb.append(Integer.toHexString((b & 0xFF) | 0x100).substring(1,3))
,如果这个C#线相当于
result += (Convert.ToInt32(b).ToString("x2") + " ").Substring(1,3);
在这两种情况下,b是一个SHA-1散列字节代码是循环。 我不明白的Java部分是((b & 0xFF)| 0x100)。它看起来像是填充它?
通常我会将Java应用程序的输出与我的C#所生成的输出进行比较,但我现在不在这样做的情况下(并且令我沮丧 - 相信我)。
'&'是按位逻辑的“AND”,它会检查比较下的变量的每一位,http://www.tutorialspoint.com/java/java_bitwise_operators_examples.htm – Xinus
从粗略读取,0xAA将变成“1AA” '在java中和''AA“'在C#中。但也许我错过了一些东西。 –
b&0xFF将屏蔽最低字节,所以无论b是什么,你都会得到0x00到0xFF之间的东西。在生成的整数中,无论以前是什么,都会设置第9位。所以你会有0x0100到0x01FF之间的东西。从该字符串中,索引1到3的子字符串被裁剪。所以你最终会得到一个类似十六进制值在100和1FF之间的字符串。 – Fildor