感谢百度,提供了算法
uint buff[10]={0x4500,0x002c,0x66c9,0x0000,0x3f11,0x0000,0xc0a8,0x0101,0xc0a8,0x0159};
/*
一下算法源于百度,感谢再感谢!!
计算对IP首部检验和的算法如下:
(1)把IP数据包的校验和字段置为0;
(2)把首部看成以16位为单位的数字组成,依次进行二进制求和
(注意:求和时应将最高位的进位保存,所以加法应采用32位加法);
(3)将上述加法过程中产生的进位(最高位的进位)加到低16位
(采用32位加法时,即为将高16位与低16位相加,之后还要把该次加
法最高位产生的进位加到低16位)
(4)将上述的和取反,即得到校验和。
2012年3月3日于日照高科园
按照以上算法便可以!
*/
unsigned long a,b;
uchar i;
for(i=0;i<10;i++)
{
a+=buff[ i]; //变量加
b=a; //暂存A中
b+=(a>>16)&0x0000ffff; //取高位与地位相加,并且加完了清0高八位
}
b=~b; //取反
|