小编Dan*_*Dan的帖子

CRC(循环冗余校验)了解优化

在过去的几天里,我一直在努力了解 CRC 的工作原理。我坚持推荐用于其实施的特定优化。

我的理解:

*CRC 是多项式除法,其中位表示 x 的幂。我可以进行除法(使用常规多项式除法或使用位)并正确获得 CRC。

*移位寄存器用于保存余数。它是 n 位(对于 n 次多项式),因为每次减法最多影响 n 位。一旦整个消息通过寄存器,它就包含除法余数。

我被困的地方:

在此页面上:http : //en.wikipedia.org/wiki/Computation_of_cyclic_redundancy_checks 实现部分有一些伪代码。我对第一个伪代码和它的两个问题很好(尽管第一个很容易解决)。我无法理解第二个,以及 xor 的关联性/交换性如何帮助。手动,我看到第二个伪代码有效,但为什么呢?

其他来源:其他一些文章给出了相同的优化(在寄存器的左侧而不是右侧提供位)。特别是,这篇文章:http : //www.ross.net/crc/download/crc_v3.txt 在第 10 节中做到了(文本搜索单词 mangled)。除了这是用桌子做的,我还没有准备好桌子!它确实说最后的 n 次迭代仅用于获取寄存器左侧的消息尾部,我理解这一点,但我再次无法理解这里的优化。

编辑:我找到了另一个参考资料(第 8 页):http : //www.hackersdelight.org/crc.pdf 但这仍然没有帮助。它说预乘与后乘相同,但我不明白这是怎么回事,因为当在寄存器左侧找到 1 位时,这会更改寄存器中的位(以触发减法)。

谢谢。感谢您对我的好奇心的帮助!

c optimization bit-manipulation

5
推荐指数
1
解决办法
1045
查看次数

标签 统计

bit-manipulation ×1

c ×1

optimization ×1