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在线计算工具

http://www.ip33.com/crc.html

代码验证

复制以下代码,在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;
}

posted @ 2021-12-09 17:43  LiJin_hh  阅读(731)  评论(0编辑  收藏  举报