CRC校验码

Posted namezhyp

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CRC校验码相关的知识,希望对你有一定的参考价值。

CRC校验码,中文是循环冗余校验码。在计算机网络、计算机组成原理等课程中均常见,他是一种常见的计算机校验码。它的实际原理十分容易理解:简单的说,它的原理就是用一个数去除以约定好的数。如果传输前后的数据除以这个数,所得余数一样,则传输正确,反之传输错误。

先举一个十进制的例子,用81除以6,得13,余3.  81就相当于信息位,余数就相当于校验位。添加校验位的目的就是确保余数为0.(这里只是举个例子)

现在用二进制来考虑。在这里以一道例题为准:给出生成多项式G(x)=x3+x2+1  信息码为101001,求对应的CRC码。

     1)对于这道题,生成多项式最高次为3,信息码为6,那么CRC码对应为9位。

     2)G(x)=1*x3+1*x2+0*x1+1   这就意味着约定的除数为1101.已知信息码和除数,进行竖式模2除。

说明:模2除和普通的竖式除法差别不大,被除数在不足时也需要补零,但是在除得当前位的商时,以最高位为准,目的是消掉目前还剩下的被除数的最高位。此外,在减法时变成了异或计算。

101001除以1101,求得最后的余数为001,001即为校验位。

    3)接收方收到101001001后,用1101模2除,余数为000,即表示传输无误。

  如果余数不是0,比如001,那么就意味着出错位为第一位,余数002表示第二位出错。。。。。之所以成为循环冗余校验,就是因为用出错的码除以余数,会得到下一个出错码,如xxxx001除以余数变成xxx010.。。。如此往复。

 

CRC校验码可以检测出奇数个、双比特和所有小于。等于校验位长度的校验码。

以上是关于CRC校验码的主要内容,如果未能解决你的问题,请参考以下文章

crc校验码计算方法是啥?

如何计算modbus-rtu的crc校验码

MODBUS通讯CRC校验码怎么算,有那位能告诉我呀

奇偶校验码与循环冗余校验码CRC

奇偶校验,海明码与crc码

CRC校验的实现(C语言,CRC16)