请教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。