本文實例講述了C++計算ICMP頭的校驗和的方法,分享給大家供大家參考。具體實現代碼如下:
{
unsigned long cksum=0;
//將數據以字為單位加到cksum
while (nSize > 1)
{
cksum += *buff++;
nSize -= sizeof(USHORT);
}
//如果為奇數, 將最后一個字擴展到雙字,再累加
if (nSize)
{
cksum += *(UCHAR*)buff;
}
//將cksum的高16位與低16位相加,取反后得到校驗和
cksum = (cksum>>16) + (cksum&&0xffff);
cksum += (cksum>>16);
return (USHORT)(~cksum);
}
希望本文所述對大家的C++程序設計有所幫助。