大家来看看这个函数 求教
unsigned long 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;
}
这里面sum>>16 和~sum是什么意思?(sum&0xffff)是什么意思?
[解决办法]
假设sum = 0x11111,且为32bit则
~sum = 0xfffeeeee (即0变1,1变0)
sum&0xffff = 0x1111
[解决办法]
这个函数的意思是把buf中的数据以挨着的2个组成32bit的数累加起来,取最低的32bit checksum值。