首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

请问CheckSum有关问题

2012-02-02 
请教CheckSum问题. unsignedshortchecksum(unsignedshort*buffer,intsize)//校验和的求法{unsignedlongcks

请教CheckSum问题.

unsigned   short   checksum(unsigned   short   *buffer,int   size)       //校验和的求法
{
unsigned   long   cksum=0;
while(size> 0)                                                                         //各位求和
{
cksum+=*buffer++;
size-=sizeof(unsigned   short);
}
if(size)
cksum+=*(unsigned   char   *)buffer;
cksum=(cksum> > 16)+(cksum   &   0xffff);                         //移位,位与运算  
cksum+=(cksum> > 16);
return   (unsigned   short)(~cksum);                                     //再取反
}

哪位哥们给说说校验和算法...

buffer和size是什么传进来的?代表什么?


[解决办法]
buffer是等待校验的数据,size是buffer长度
返回的是校验值

就是说buffer有些不同的话,checksum就会不同
用于检验buffer传递时数据是否有偏差
[解决办法]
buffer 是待校验的数据,
size 是这个等待校验的数据长度
[解决办法]
IP数据报的检验和:
  为了计算一份数据报的I P检验和,首先把检验和字段置为0。然后,对首部中每个16 bit进行二进制反码求和(整个首部看成是由一串16 bit的字组成),结果存在检验和字段中。当收到一份I P数据报后,同样对首部中每个16 bit进行二进制反码的求和。由于接收方在计算过程中包含了发送方存在首部中的检验和,因此,如果首部在传输过程中没有发生任何差错,那么接收方计算的结果应该为全1。

热点排行