读书人

网际校验算法的代码的理解,该怎么处理

发布时间: 2012-06-13 12:30:18 作者: rapoo

网际校验算法的代码的理解

C/C++ code
    unsigned short checksum(unsigned short *buf,int nword)    {        unsigned long sum;                for(sum=0;nword>0;nword--)            sum += *buf++;    sum = (sum>>16) + (sum&0xffff);        sum += (sum>>16);             return ~sum;    }

其中,以下代码,我没有理解,求高手详细解答,感谢分享!
C/C++ code
sum = (sum>>16) + (sum&0xffff);        sum += (sum>>16);   



[解决办法]
可以将unsigned long sum;看成两个unsigned short
设为unsigned short sum1;(高位),unsigned short sum2;(低位)
sum>>16即为sum1,sum&0xffff即为sum2
也就是说除了原来buf的加运算,每次得到的结果unsigned short溢出的部分也参与 加 运算

读书人网 >VC/MFC

热点推荐