我不理解以下代码中的一些内容.为什么长度设置为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)
这个
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,因此代码显示"如果它适合一位数,则手动在前面加零".
此代码将十六进制的哈希码作为字符串获取,每个字节表示为一个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)
归档时间: |
|
查看次数: |
122 次 |
最近记录: |