例如下面图中的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;
}
本文介绍了一个用于计算16位网络校验和的有效算法。该算法通过遍历输入地址并累加所有16位值来计算校验和。如果剩余长度为1,则单独处理最后一个字节。最后通过取反得到最终校验和。

445

被折叠的 条评论
为什么被折叠?



