1.设置一个变量data,存放要校验的数据。
2.设置一个变量poly,存放多项式。
3.设置一个变量crc,存放crc的值,初值为0。
4.crc = crc^data。(得到被除数)
5.循环以下过程,循环的次数为data的bit数。
6.如果crc的最高位为1,则crc=(crc<<1)^poly,否则,crc=crc<<1。
7.结束循环,此时得到的crc值就是要求的校验值。
假如:多项式为X+X+1,数据为0xB3,则data = 0xB3,poly = 0x09
crc实现程序为:
数据为单个字节时:
u8 crc4_D(u8 data)
{
u8 crc = 0;
u8 poly = 0x09;
int i;
poly = poly<<4;
crc = data;
for(i = 0; i < 8; i++)
{
if(crc&0x80)
crc = (crc<<1)^poly;
else
crc = crc<<1;
}
return crc;
}
数据为多个字节时:
u8 crc4(u8 *str,u32 len)
{
u8 crc = 0;
u8 data = 0;
u8 poly = 0x09;
int i;
poly = poly<<4;
while(len--)
{
data = *(str++);
crc = crc ^ data;
for(i = 0; i < 8; i++)
{
if(crc&0x80)
crc = (crc<<1)^poly;
else
crc = crc<<1;
}
}
return crc;
}