計算原理:首先把前面兩個數(shù)據(jù)整合成一個16bit數(shù)據(jù),對多項式進行異或運算,求出余數(shù)再加上后面的一個字節(jié)數(shù)據(jù),在進行求余,以此類推,加到最后一個數(shù)據(jù)結(jié)束后,別忘了后面還需要對數(shù)據(jù)進行補充8個0,于是在左移動8位,對多項式求余數(shù),最后所得為crc值。
uchar crc_8(uchar data_1,uchar data_2,uchar data_3,uchar data_4)
{
long data,crc_cal,msb_det;
uchar bit_num=16;
uint crc_data;
crc_cal=0x107;//
msb_det=0x8000;
data=data_1;
data<<=8;
data=data+data_2;
while(bit_num>=9)
{
if ((data&msb_det)==0)//判斷最高位
{ msb_det=msb_det>>1;
bit_num--;
}
data=data^(crc_cal<<(bit_num-9));
}
data=(data<<8)|data_3;
bit_num=bit_num+8;
msb_det=0x8000;
while(bit_num>=9)
{
if ((data&msb_det)==0)//判斷最高位
{ msb_det=msb_det>>1;
bit_num--;
}
data=data^(crc_cal<<(bit_num-9));
}
data=(data<<8)|data_4;
bit_num=bit_num+8;
msb_det=0x8000;
while(bit_num>=9)
{
if ((data&msb_det)==0)//判斷最高位
{ msb_det=msb_det>>1;
bit_num--;
}
data=data^(crc_cal<<(bit_num-9));
}
data=data<<8;
bit_num=bit_num+8;
msb_det=0x8000;
while(bit_num>=9)
{
if ((data&msb_det)==0)//判斷最高位
{ msb_det=msb_det>>1;
bit_num--;
}
data=data^(crc_cal<<(bit_num-9));
}
crc_data=data;
return crc_data;
}
歡迎光臨 (http://m.zg4o1577.cn/bbs/) | Powered by Discuz! X3.1 |