我看CRC算法讲解的时候都是按连续计算方式进行,即下一个单元的高位不断追加在余数的后面,而在算法实现的时候,是不断的左移,实际上是在余数的后面不断地追加0,最后在异或上下一个单元。这样能保证和理论的结果相等吗,如果是相等的,其背后的数学原理是什么?
crc ^= *data++;
后一个单元如何利用前一个单元的余数呢?
下面是图片,左图是手算,也是所有大学课堂上讲的方法。右边是实际代码里的思想,为什么到浅绿色那步,两种方法结果相等?
位左移不就是把下一个单元高位追加到余数的后面么
是否追加0,还要看你是用什么类型左移吧。对于4字节来说,不断左移时,第一个字节就是把下一个单元高位追加到余数的后面
明白啦