储备知识:
- 同或运算(同0异1)
- 异或运算(同1异0)
CRC校验中,多项式可表示为\((\sum_{i=1}^{j}C_iX^i)+1,C=0,1\)
注:使用多项式算术是为了在进行二进制计算时无需考虑进位问题
CRC中用到的除数,由多项式的各项系数组成
运算举例:
设多项式为X6+X4+X2+X+1,进行校验的数据设为1101011011
可得除数为1 0 1 0 1 1 1
在原数据末端加上多项式阶数个0,得:1101011011000000
与除数进行异或运算:
\[\frac{1101011011000000}{1010111******}(*无意义占位符) \]得结果:
\[011100[011000000](括号内为未参与异或运算的位,加在运算结果后) \]再进行异或运算:
\[\frac{0111100011000000}{*1010111******}(*无意义占位符) \]注:进行异或运算时数据第一个1与除数左对齐
再进行异或运算直至所有位都进行过异或运算为止
得到的结果即为CRC校验和(长度 = 除数减1 = 之前加0的个数)
将校验和加在原数据之后,就是带有CRC校验和的数据
注:当最后异或运算结果的有效位数较少时,加在原数据后的校验和的长度也应 = 除数减1 = 之前加0的个数,长度不够在校验和前面加0
标签:运算,多项式,校验,CRC,异或,冗余,除数 From: https://www.cnblogs.com/wgq0402/p/17552010.html