之前在看CRC算法的表驱动原理,一直没搞懂,然后自己按照文章里的说法在纸上重写了一遍,豁然开朗。很多算法以为高深,直到自己也会了之后。
CRC翻译为循环冗余校验,算法的本质是企图校验数据差错,保证数据的正确和完整性。在数学描述上就是简单的求余,把要校验的字符串当作一个长整数,挑选一个合适除数,相除的余数就是CRC值。如果真的用数学上的除法,会导致位之间强关联,后来用mod2除法,弥补这一缺陷。对CRC介绍的很全面的文章参见文后给的参考资料。
举个例子:
字符串(被除数)A: 11001010 01101001
除数B: 110111010(宽为8位)
A/B
----------------------------------------------------
110111010) 11001010 1101001
11011101 0 ------>(1)