发个原创crc8计算方法,直截了当,一看就懂

  • jacksong
  • LV2工程师
  • |      2014-12-25 13:19:52
  • 浏览量 1504
  • 回复:3

//计算原理,首先把前面两个数据整合成一个16bit数据,对多项式进行异或运算,求出余数再加上后面的一个字节数据,在进行求余,以此类推,
//加到最后一个数据结束后,别忘了后面还需要对数据进行补充8个0,于是在左移动8位,对多项式求余数,最后所得为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;


}
  • 0
  • 收藏
  • 举报
  • 分享
我来回复

登录后可评论,请 登录注册

所有回答 数量:3
爸比说你没用 2015-04-17
支持一下!!!!
0   回复
举报
发布
-12大风 2015-03-19
顶起 。。。。。。。。。。。。。
0   回复
举报
发布
gtrjolin1986 2014-12-25
欢迎多来分享
0   回复
举报
发布
x
收藏成功!点击 我的收藏 查看收藏的全部帖子