#include <stdio.h>
unsigned char reversal_data(unsigned char dat){
unsigned char temp = 0;
for(unsigned char i=0;i<8;i++){
if(dat&0x80){
temp |= 0X01<<i;
}
dat =dat<<1;
}
return temp;
}
unsigned char ZKC_CRC_8(unsigned char poly,unsigned char init,unsigned char ref_in,unsigned char ref_out, unsigned char *di,unsigned char len)
{
unsigned char crc_poly ;
unsigned char data_t;
unsigned char temp = 0;
crc_poly = poly;//0X13 ---》 X^8+X^4+X^1+1 total 8 effective bits without X^8.
data_t = init; //初始值
while(len--)
{
if(ref_in){
data_t ^=reversal_data(*di++);
}else {
data_t ^= *di++;
}
for (unsigned char i=8; i>0; --i)
{
if (data_t & 0x80)
data_t = (data_t<<1) ^ crc_poly;
else
data_t = (data_t<<1);
}
}
if(ref_out){
temp = data_t;
data_t = reversal_data(temp);
}
return (data_t);
}
int main()
{
/* Write C code in this online editor and run it. */
unsigned char CRC = 0;
unsigned char buff[]={0x011,0x22};
CRC = ZKC_CRC_8(0x13,0xcb,1,1,buff,2);
printf("CRC8 = 0x%02X \n",CRC);// 0011 0011
return 0;
}
CRC8校验自定义方法实现
最新推荐文章于 2024-06-12 09:35:24 发布