CRC循环冗余检验的应用很广泛,它是用来保障数据传输的过程中不会出差错而引入的,同时也可以保证收发两端的数据不会出差错。是最常用的差错检测机制,在程序中也要用到CRC来保证传输的正确性。发端加入CRC冗余校验码,接收端解码并验证。首先介绍CRC的原理和应用。
任意一个由二进制码流串都可以用一个多项式表示,比如二进制1010110可以表示为多项式

CRC的码字生成的软件方法是借助于多项式除法的。除法之后得到的余数即为校验字段。比如信息字段是

采用的CRC的位数是4位,相应的生成多项式为

多项式除法之后,得余数为

所以最后的码字为s(x)和r(x)的拼接,表示为二进制1010110 0011。
在程序的计算中,不需要一步一步像上述的一样介绍的计算多项式余数的方法进行CRC的计算,只需要查表的方法计算CRC就可行。下图说明了CRC校验值是如何通过查表得方法计算的。

此处举例的是16位CRC的生成示意图,其他的位数的CRC生成的原理相同。0到F表示的是CRC的位数从低到高排列,LSB到MSB表示需要计算CRC的信息字节的位数比特从低到高排列。
网友评论