unsigned char和unsigned short两种类型实现校验和

main函数中屏蔽的为unsigned short型,为屏蔽为unsigned char型实现方法

#include<stdio.h>
unsigned short checksum(unsigned short *buf,int nword)
{
unsigned long sum;
for(sum=0;nword>0;nword--)
{
sum += *buf++;
sum = (sum>>16) + (sum&0xffff);
}
return ~sum;
}

unsigned char checkSum(int startpos,int endpos,unsigned char *pbuf)
{
    unsigned char cksum = 0;
    for(int n=startpos; n<endpos; n++)
    {
        cksum += pbuf[n];
    }
    cksum = (cksum>>16) + (cksum&0xffff);
    return  cksum;
}


void main()
{  
//	unsigned short buffer[20]={0x0aaa,0x3bbf,0xd20e,0x960d,0x0011,0x001c,0xd123,0x2742,0x001c,0x0000,0x6c41,0x5661,0x0000,0x0e00,0xf8b6,0xd401,0x9313,0x0000,0x0000,0x0000};
//	unsigned short re_checksum;     
//	re_checksum=checksum(buffer,n);
//		printf("%x\t",re_checksum); 
//	if(re_checksum==0x285c) 
//		printf("校验和正确!\n"); 
//	else          
//		printf("校验和不正确!\n");

	unsigned char buffer[127] ={ 0x9F, 0xE4, 0x12, 0x00, 0x11, 0x03, 0x02, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xB1, 0xDB, 0xE7, 0x07, 0x07, 0x0C, 0xA8, 0x41, 0xAC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};

	unsigned char re_checksum;
	re_checksum = checkSum(0,127,buffer);
	printf("%x\t",re_checksum); 
	if(re_checksum==0x285c) 
		printf("校验和正确!\n"); 
	else          
		printf("校验和不正确!\n");
} 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值