博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ping中用到的校验和算法
阅读量:6281 次
发布时间:2019-06-22

本文共 1050 字,大约阅读时间需要 3 分钟。

in_cksum(addr, len)u_short *addr;int len;{        register int nleft = len;        register u_short *w = addr;        register u_short answer;        register int sum = 0;        /*         *  Our algorithm is simple, using a 32 bit accumulator (sum),         *  we add sequential 16 bit words to it, and at the end, fold         *  back all the carry bits from the top 16 bits into the lower         *  16 bits.         */        while( nleft > 1 )  {                sum += *w++;                nleft -= 2;        }        /* mop up an odd byte, if necessary */        if( nleft == 1 ) {                u_short u = 0;                *(u_char *)(&u) = *(u_char *)w ;                sum += u;        }      /*         * add back carry outs from top 16 bits to low 16 bits         */       sum = (sum >> 16) + (sum & 0xffff); /* add hi 16 to low 16 */ (将高位的数值加到低位)
sum += (sum >> 16); /* add carry */ (如果超过16位的最大的情况也加起来) 
answer = ~sum; /* truncate to 16 bits */ (取反)
return (answer);}

转载于:https://www.cnblogs.com/lxgeek/archive/2012/01/05/2313197.html

你可能感兴趣的文章
String、StringBuffer与StringBuilder之间区别
查看>>
用 Python 实现一个大数据搜索引擎
查看>>
asp页面
查看>>
oracle表空间表分区详解及oracle表分区查询使用方法(转+整理)
查看>>
【整理学习HDFS】Hadoop Distributed File System 一个分布式文件系统
查看>>
外部系统调用规则引擎接口
查看>>
SSH通过密钥对验证方式进行远程访问及控制
查看>>
Python学习——编程语言介绍
查看>>
深入浅出oracle锁---原理篇
查看>>
SentOS Linux下安装MongoDB
查看>>
我的友情链接
查看>>
linux 下配置静态路由
查看>>
解决问题E: 无法获得锁
查看>>
Python 实现文件复制、删除
查看>>
在onCreate方法中动态创建contentView
查看>>
Windowbuilder之swt designer安装与使用
查看>>
我的友情链接
查看>>
实现数据库的跨库join
查看>>
centos7之最基本的nfs文件共享服务
查看>>
VMware虚拟化技术培训(2)了解vSphere
查看>>