生成多项式就是用来把要进行防错处理的二进制码流进行转换生成校验码,然后接收方会收到原始的二进制码流和校验码,按照与发送方相同的多项式再次进行转换生成校验码,与发来的校验码进行比较。如果一致则说明接收到的二进制码流是正确的;反之则说明接收到的二进制码流包含错误。
生成步骤
1、将X的最高次幂为R的生成多项式G(X)转换成对应的R+1位二进制数。
2、将信息码左移R位,相当于对应的信息多项式
3、用生成多项式(二进制数)对信息码做除,得到R位的余数(注意:这里的二进制做除法得到的余数其实是模2除法得到的余数,并不等于其对应十进制数做除法得到的余数)。
4、将余数拼到信息码左移后空出的位置,得到完整的CRC码。
//注意:余数比被除数少一位,不够则补0.
以上转载自:生成多项式_百度百科
例题:
信息码:10101
多项式为:x^3+x+1
求使用CRC后最终发送的信息码
解:
1)将多项式转换成对应的二进制除数1011
2)将信息码左移R位(本例为3位)10101 000
3)将左移后的信息码与1)中的二进制数作异或运算:
10101000
1011 //左对齐
11000
1011
1110
1011
101
除法实际上用了异或运算,相同为0,不同为1
最后得出的101就是冗余位
整个就CRC是10101101
//二进制的除法,中的减法使用异或运算的???而不是直接减的。。。。(why????)
以下算式,就是通过异或算的减法。。。