首页 > 代码库 > 校验和

校验和

检验和(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);
}

本文出自 “12034922” 博客,请务必保留此出处http://12044922.blog.51cto.com/12034922/1862644

校验和