概述
使用生成多项式,将K位信息位经运算得到R位校验位,然后将K+R位一起传输给接收方。接收方根据生成多项式和接收到的K+R位数据,校验数据。若正确,取出数据位进行处理;若错误,提醒发送方重传。
计算过程
生成多项式:G(x)=X^4+X+1
信息位:10111
解题步骤:
1、化解生成多项式为10011(4次幂系数为1,3次幂系数为0,2次幂系数为0,1次幂系数为1,0次幂系数为1,所以化解生成多项式为10011),
2、信息位后加4个0(因生成多项式最高次幂为4),然后对10011做模二除运算(异或除法),如下图:
异或相同为0,不同为1
c语言实现过程
#include <stdio.h>
#include <stdint.h>
uint8_t crc(uint8_t * data,uint16_t len,uint8_t init)
{
uint8_t proy=0x03; /*多想去掉最高次幂系数*/
uint8_t data1,data2; /*把八位分成两个四位*/
while(len--)
{
uint8_t i;
data1=((*data)&0xF0)>>4; /*八位高位*/
data2=((*data)&0x0F); /*八位低位*/
init^=(data1<<0);
for(i=0;i<4;i++)
{
if(init&0x08)
{
init=((init<<1)&(0x0F))^proy;
}
else
{
init=(init<<1);
}
}
init^=(data2<<0);
for(i=0;i<4;i++)
{
if(init&0x08)
{
init=((init<<1)&0X0F)^proy;
}
else
{
init=(init<<1);
}
}
data++;
}
return init;
}
测试
测试正确
会写四位就会写 crc8 crc16,crc32