例如下面图中的checksum,经过测试有效可使用
代码:
uint16_t net_tool_chksum(uint16_t *addr,int len)
{
int nleft=len;
int sum=0;
uint16_t *w=addr;
uint16_t answer=0;
while(nleft>1)
{ sum+=*w++;
nleft-=2;
}
if( nleft==1)
{ *(uint8_t *)(&answer)=*(uint8_t *)w;
sum+=answer;
}
sum=(sum>>16)+(sum&0xffff);
sum+=(sum>>16);
answer=~sum;
return answer;
}