CRC是数据传输过程中的常见的一种校验方式,由于其算法简单,而且出错率极低,因而广为使用。工作中使用CRC算法非常多,不过一般由于项目紧急,仅仅只会应用,具体为什么这么算不求甚解。本文将推导CRC算法,从最初的模二除法到CRC优化、查表。
在推导CRC算法之前,看了很多其它人的讲解,虽然有所启发,但是大部分都没有讲到最关键的两个地方:
-
模二除法新的数据是移位到CRC寄存器的最低位,为什么现在的算法都是异或高位?
-
CRC查表的是怎么推导过来的,表格又是怎么获得?
后面会详细讲解整个推导过程,尤其是上面两点。
CRC算法是从模二除法演化而来,目前校验算法有CRC4、CRC5、CRC6、CRC7、CRC8、CRC16、CRC32、CRC64等,其中常用的就是CRC8、CRC16、CRC32和CRC64.
下面我们先从模二除法开始讲解