我对这段代码并不了解.哈希

New*_*der 1 c# hash

我不理解以下代码中的一些内容.为什么长度设置为16?ret变量的目的是什么?

请解释.

我不明白这个:

    foreach (byte a in hash)
    {
        if (a < 16)
            ret += "0" + a.ToString("x");
        else
            ret += a.ToString("x");
    }
Run Code Online (Sandbox Code Playgroud)

Jon*_*Jon 6

这个

if (a < 16) 
    ret += "0" + a.ToString("x"); 
else 
    ret += a.ToString("x"); 
Run Code Online (Sandbox Code Playgroud)

是一种更糟糕的写作方式

ret += a.ToString("x2");
Run Code Online (Sandbox Code Playgroud)

它的目的是产生一个长度恰好为2的字符串,这是该数字的十六进制形式a.由于十六进制只能通过一位数达到15,因此代码显示"如果它适合一位数,则手动在前面加零".


Bro*_*ass 6

此代码将十六进制的哈希码作为字符串获取,每个字节表示为一个2位十六进制值 - 您可以将其缩短为:

foreach (byte b in hashValue)
   ret +=b.ToString("X2");
Run Code Online (Sandbox Code Playgroud)

或者更好地使用StringBuilder代替:

StringBuilder strHash = new StringBuilder();
foreach (byte b in hashValue)
    strHash.Append(b.ToString("X2"));
ret = strHash.ToString();
Run Code Online (Sandbox Code Playgroud)

或使用Linq更优雅(但引入一些开销):

ret = string.Join("",hashValue.Select(b => b.ToString("X2")));
Run Code Online (Sandbox Code Playgroud)