网际校验算法的代码的理解
- 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溢出的部分也参与 加 运算