Chinaunix首页 | 论坛 | 博客
  • 博客访问: 475492
  • 博文数量: 104
  • 博客积分: 3455
  • 博客等级: 中校
  • 技术积分: 1216
  • 用 户 组: 普通用户
  • 注册时间: 2009-01-18 18:33
文章分类

全部博文(104)

文章存档

2015年(3)

2014年(1)

2013年(7)

2012年(8)

2011年(11)

2010年(18)

2009年(56)

我的朋友

分类:

2010-02-21 17:15:28

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;
}


阅读(4157) | 评论(0) | 转发(0) |
0

上一篇:新年好

下一篇:随想

给主人留下些什么吧!~~