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

编程语言: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]);
	}
}

运行结果如下图:

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值