检验和(checksum),在数据处理和数据通信领域中,用于校验目的地一组数据项的和。它通常是以十六进制为数制表示的形式。如果校验和的数值超过十六进制的FF,也就是255. 就要求其补码作为校验和。通常用来在通信中,尤其是远距离通信中保证数据的完整性和准确性。
2、校验和算法实现
代码如下:
USHORT checksum (USHORT *buffer,int size)
{
Unsigned long cksum=0;
While (size>1)
{
Cksum +=*buffer++;
size -=sizeof(USHORT);
}
If (size)
{
Cksum +=*(UCHAR *) buffer;
}
//将32位转换为16位
While (cksum>>16)
Cksum = (cksum>>16) + (cksum & 0xffff);
Return (USHORT) (~cksum);
}
#include<stdio.h>
int main()
{
int a[8]={0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08};
int i,sum=0;
for (i=0;i<8;i++)
sum+=a[i];//将每个数相加
if(sum>0xff)
{
sum+=1;
sum=~sum;
}
sum=sum&0xff;
printf("0x%x\n",sum);
}