Internet校验和算法:
1.待校验的相邻字节成对组成16比特整数并计算其和的二进制反码(二进制反码求和).
2.生成校验和,校验和区域本身应当先置0,并和待校验数据相加,其和进行二进制反码运算后赋给校验和区域.
3.检查校验和,将所有字节,包括校验和,进行相加并求二进制反码.如果结果为全1(即二进制反码算术中的0),检查通过.
二进制反码求和:从低位到高位逐列进行和计算,如果最高位(16位)进位,则得到的结果加1,一直循环到最高位没有进位为止.最后把得到的结果取反.程序实现如下:
short checksum(unsigned short *buf, int nwords)
{
unsigned long sum;
for (sum = 0; nwords > 0; nwords--)
sum += *buf++;
while (sum >> 16)
sum = (sum >> 16) + (sum & 0xffff);
return ~sum;
}
阅读(4174) | 评论(0) | 转发(0) |