CRC8计算
CRC的C实现
unsigned char cal_crc(unsigned char *vptr, unsigned char len)
{
const unsigned char *data = vptr;
unsigned crc = 0;
int i, j;
for (j = len; j; j--, data++)
{
crc ^= (*data << 8);
for (i = 8; i; i--)
{
if (crc & 0x8000)
crc ^= (0x1070 << 3);
crc <<= 1;
}
}
return (unsigned char)(crc >> 8);
}
CRC在线计算工具
代码验证
复制以下代码,在https://www.runoob.com/try/runcode.php?filename=helloworld&type=c验证即可
#include <stdio.h>
//CRC-8 x8+x2+x+1
unsigned char cal_crc(unsigned char *vptr, unsigned char len)
{
const unsigned char *data = vptr;
unsigned crc = 0;
int i, j;
for (j = len; j; j--, data++)
{
crc ^= (*data << 8);
for (i = 8; i; i--)
{
if (crc & 0x8000)
crc ^= (0x1070 << 3);
crc <<= 1;
}
}
return (unsigned char)(crc >> 8);
}
int main()
{
//data 中正确数据为0x24
unsigned char data[4]={0xa5,0x0d,0x14,0x01};
unsigned char crc8=0;
crc8=cal_crc(&data[0],4);
/* 我的第一个 C 程序 */
printf("crc8=%X\r\n",crc8);
return 0;
}