0%

C语言实现CRC检验

说明

之前在做一个项目的时候,为了保证数据的准确性,用到了CRC检验,现在将其总结一下,顺便也复习一下。首先说一下CRC校验,他的全称是循环冗余校验(cyclic redundancy check)。CRC检验的基本思想是利用线性编码理论,在发送端根据要传送的k位二进制码序列,以一定的规则产生一个检验码r位(就是CRC码),附在信息后面,构成一个新的二进制码序列数共(k+r)位,最后发送出去。接收端根据同样的规则校验,以确定传送中是否出错。接收端有两种处理方式:1、计算k位序列的CRC码,与接收到的CRC比较,一致则接收正确。2、计算整个k+r位的CRC码,若为0,则接收正确。CRC码有多种检验位数,8位、16位、32位等,原理相同。16位的CRC码产生的规则是先将要发送的二进制序列数左移16位(即乘以2的16次方后),除以一个多项式,最后所得到的余数就是CRC码。

不说复杂了,CRC 算法的基本思想是将传输的数据当做一个位数很长的数,将这个数除以另一个数,得到的余数作为校验数据附加到原数据后面。除法采用正常的多项式乘除法,而加减法都采用模2运算。模2运算就是结果除以2后取余数,如 3 mod 2 = 1,在计算机中就是异或运算!下面举例说一下:

CRC介绍

实际操作

结语

之前做项目的时候也参考了很多资料,目前根据根据回忆写这篇博客也是参考了很多别人的东西,例如:liyuanbhu的CSDN频道,mculover666的知乎回答,还有脚本51的分析介绍。通过这些我也学习到了很多的东西,对CRC检验也有了深刻的体会,我觉得还是挺开心的!

-------------本文结束感谢您的阅读-------------