当前位置:网站首页>某相机通信协议校验CRC程序

某相机通信协议校验CRC程序

2022-06-10 09:08:00 vzhb

编程语言:c语言

根据设定的算法规则,输入字符串,计算得出校验数据;

代码如下:

#include <stdio.h> 
int main(void) 
{ 
	//unsigned char ptr[31] = {0xAA ,0x1F ,0x08 ,0x01 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x2B ,0xD8 ,0xF9 ,0xFF ,0xFF ,0xA0 ,0xB3 ,0x01 ,0x00 ,0x56 ,0xD2 ,0x04 ,0x00 ,0x00 ,0x3F ,0x3C ,0x34 ,0x01,0x00};
	unsigned char ptr[31] = {0xAA ,0x1F ,0x08 ,0x01 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x2B ,0xEF ,0x04 ,0x00 ,0x00 ,0xA0 ,0xB3 ,0x01 ,0x00 ,0x56 ,0xD2 ,0x04 ,0x00 ,0x00 ,0x3F ,0x3C ,0x34 ,0x01,0x00};
	unsigned char i ,len; 
	unsigned char t = 0; 
	unsigned char crc = 0x00; 
	len = sizeof(ptr);
	//最后一位保留给校验位 
	int len_t=len-1; 
	while(len_t--) 
	{ 
		crc ^= ptr[t++]; 
		for (i=8; i>0; --i) 
		{ 
			if (crc & 0x80) 
			{ 
				crc = (crc << 1) ^ 0xD5; 
			}
			else
				crc = (crc << 1); 
		} 
	}
	printf("crc = 0x%x \n",crc); 
	ptr[len-1] = crc;
	for(i=0;i<len;i++) 
	{ 
		printf("[%02X]",ptr[i]);
	}
}

运行结果如下图:

 

原网站

版权声明
本文为[vzhb]所创,转载请带上原文链接,感谢
https://blog.csdn.net/zhangb98/article/details/125188761