|
我在学习网络编程, 书上说,检验和的计算是反码求和,
请问,如何求16bit数反码?
[code:1]
unsigned short check_sum(unsigned short *addr,int len)
{
int nleft=len;
int sum=0;
unsigned short *w=addr;
unsigned short answer=0;
while(nleft>1)
{
sum+=*w++;
nleft-=2;
}
if (nleft==1)
{
*(unsigned char *)(&answer)=*(unsigned char *)w;
sum+=answer;
}
sum=(sum>>16)+(sum&0xffff);
sum+=(sum>>16);
answer=sum;
return(answer);
}
[/code:1]
以上求和函数的算法的导出原理是啥? |
|