上一篇讲了CRC校验中的模2除算法。这次讲CRC校验原理和一些基础概念。
百度百科:循环冗余校验码(CRC)的基本原理是:在K位信息码后再拼接R位的校验码,整个编码长度为N位,因此,这种编码也叫(N,K)码。对于一个给定的(N,K)码,可以证明存在一个最高次幂为N-K=R的多项式G(x)。根据G(x)可以生成K位信息的校验码,而G(x)叫做这个CRC码的生成多项式。 校验码的具体生成过程为:假设发送信息用信息多项式C(X)表示,将C(x)左移R位,则可表示成C(x)*x的R次方,这样C(x)的右边就会空出R位,这就是校验码的位置。通过C(x)*X的R次方除以生成多项式G(x)得到的余数就是校验码。
看到这有没有一脸懵逼。讲的太复杂了,我就是一个单细胞生物,你这让我怎么看的懂?不过重点还是需要抓住,1:校验码长度:R=N-K。2:信息码/G(x) 的余数就是校验码。对于只想弄清楚具体怎么算,但又不想了解原理的人(没错是我),这就够了。
一般我们只知道信息码和多项式,根据这俩要算出校验码来。信息码就是传输文件,多项式就是常用的什么CRC32多项式或16位多项式啦。实际传输的时候,发送和接收方都有一个多项式。发出来的信息怎么知道对不对呢,其本质就是接收方再用接收的信息码除多项式累计结果得到自己的CRC校验码然后与发送方的校验码比较,一致就说明文件无误。
既然方法已经明了,那就是去算喽,这个时候不会模2除法算的结果说不定就错了。其实CRC算法说穿了就是除法,模2除法的余数。只要知道了这个原理,再去看CRC的代码就会对其意图一目了然!
求校验码。方法就是模2除法。不明白的可去看我上一篇模2除法。https://blog.csdn.net/weixin_38431416/article/details/103519824