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");
}