也许我只是没有看到它,但 CRC32似乎要么不必要的复杂,或不充分的解释任何地方,我可以在网上找到。
我知道它是消息值的一个非进位算术除法的余数,除以(生成器)多项式,但我不知道它的实际实现。
我读过 CRC 错误检测算法无痛指南,我必须说它不是无痛的。理论上讲得很好,但作者从来没有说过一句简单的“就是这样”他确实说了标准的 CRC32算法的参数是什么,但是他没有清楚地说明如何得到它。
最让我抓狂的是,他说“就是这个了”,然后又补充道,“哦,顺便说一下,它可以被逆转,也可以用不同的初始条件开始”,而且没有给出一个明确的答案,在他刚刚添加的所有修改中,计算 CRC32校验和的最终方法是什么。
我尝试用 C 语言编写表格的形式:
for (i = 0; i < 256; i++)
{
temp = i;
for (j = 0; j < 8; j++)
{
if (temp & 1)
{
temp >>= 1;
temp ^= 0xEDB88320;
}
else {temp >>= 1;}
}
testcrc[i] = temp;
}
但这似乎产生的价值观与我在互联网上其他地方发现的价值观不一致。我 可以使用我在网上找到的值,但我想了解它们是如何创建的。
如果能帮助我们理清这些令人难以置信的数字,我们将不胜感激。