我找到了在 C# 中实现 Adler32 算法的方法,我想使用它,但我不明白部分代码:
有人可以解释一下吗:
1)为什么在sum1和sum2初始化时使用位运算符
2)为什么 sum2 被转移?
维基上的 Adler32 https://en.wikipedia.org/wiki/Adler-32
& 运算符解释:( 如果两个操作数中都存在二进制 AND 运算符,则将其复制一点到结果中)
private bool MakeForBuffer(byte[] bytesBuff, uint adlerCheckSum)
{
if (Object.Equals(bytesBuff, null))
{
checksumValue = 0;
return false;
}
int nSize = bytesBuff.GetLength(0);
if (nSize == 0)
{
checksumValue = 0;
return false;
}
uint sum1 = adlerCheckSum & 0xFFFF; // 1) why bit operator is used?
uint sum2 = (adlerCheckSum >> 16) & 0xFFFF; // 2) why bit operator is used? , why is it shifted?
for (int i = 0; i < nSize; i++)
{
sum1 = (sum1 + bytesBuff[i]) % adlerBase;
sum2 = (sum1 + sum2) % adlerBase;
}
checksumValue = (sum2 << 16) + sum1;
return true;
}