|
感謝百度,提供了算法
uint buff[10]={0x4500,0x002c,0x66c9,0x0000,0x3f11,0x0000,0xc0a8,0x0101,0xc0a8,0x0159};
/*
一下算法源于百度,感謝再感謝!!
計(jì)算對(duì)IP首部檢驗(yàn)和的算法如下:
(1)把IP數(shù)據(jù)包的校驗(yàn)和字段置為0;
(2)把首部看成以16位為單位的數(shù)字組成,依次進(jìn)行二進(jìn)制求和
(注意:求和時(shí)應(yīng)將最高位的進(jìn)位保存,所以加法應(yīng)采用32位加法);
(3)將上述加法過(guò)程中產(chǎn)生的進(jìn)位(最高位的進(jìn)位)加到低16位
(采用32位加法時(shí),即為將高16位與低16位相加,之后還要把該次加
法最高位產(chǎn)生的進(jìn)位加到低16位)
(4)將上述的和取反,即得到校驗(yàn)和。
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; //取反
|
|