网际校验和(Internet Checksum)算法实现
来源:互联网 发布:局部优化算法 编辑:程序博客网 时间:2024/05/18 02:55
网际校验和算法实现 佟强 2008.10.20
原理请参考:
网际校验和算法: http://blog.csdn.net/microtong/archive/2008/10/20/3112139.aspx
网际校验和算法的特征:http://blog.csdn.net/microtong/archive/2008/10/20/3112157.aspx
- /*
- pBuffer是要校验的数据报开始地址
- nSize指定校验内容长度,单位是字节
- */
- unsigned short checksum_calculating(unsigned short *pBuffer, int nSize)
- {
- unsigned long dwCksum = 0; // 32位累加和
- unsigned char* p=(unsigned char*)&dwCksum;
- // 以两字节为单位反复累加
- while(nSize > 1)
- {
- dwCksum += *pBuffer++;
- printf("/t/t%.2x %.2x %.2x %.2x/n",*p,*(p+1),*(p+2),*(p+3));
- nSize -= sizeof(unsigned short);
- }
- printf("/t/t%.2x %.2x %.2x %.2x/n",*p,*(p+1),*(p+2),*(p+3));
- // 如果总字节数为奇数则加上最后一个字节
- if (nSize)
- {
- dwCksum += *(unsigned char*) pBuffer;
- printf("/t/t%.2x %.2x %.2x %.2x/n",*p,*(p+1),*(p+2),*(p+3));
- }
- //把32位整数高位中的进位累加到低16位
- while(dwCksum>>16){
- dwCksum = (dwCksum&0xffff) + (dwCksum>>16);
- printf("/t/t%.2x %.2x %.2x %.2x/n",*p,*(p+1),*(p+2),*(p+3));
- }
- //取反得到校验和
- dwCksum = ~dwCksum;
- printf("/t/t%.2x %.2x %.2x %.2x/n",*p,*(p+1),*(p+2),*(p+3));
- // 返回16位校验和
- return (unsigned short) (dwCksum);
- }
- 网际校验和(Internet Checksum)算法实现
- 网际校验和算法(Internet CheckSum)
- 网际校验和(Internet Checksum)算法的特征
- internet网络 checksum校验和计算方法
- Internet checksum 因特网检验和的算法
- C++ Exercises(十七)---网际校验和算法
- 用Golang编写的网际校验和算法
- 网际校验算法的理解
- Checksum 校验和
- Checksum 校验和
- 滚动校验(Rolling Checksum)算法
- 校验和代码(CheckSum)
- MD5 校验和(checksum)
- LSP校验和(Checksum)
- CheckSum校验
- checksum校验
- checksum校验
- 网际层(Internet)
- 前三季度GDP增速跌破10%
- 网际校验和(Internet Checksum)算法的特征
- 盗版是微软中国最大的恩人!
- oracle数据库insert后获取insert数据的自增id值
- 计算教师工作量
- 网际校验和(Internet Checksum)算法实现
- How to Build an Economic Model in Your Spare Time (如何利用业余时间建立经济模型)
- 马云:世界该由懒人支撑
- SD2.0专访张昌利:互联网时代的软件知识产权保护
- Thunder people
- 在编写手机程序时,经常要进行各个屏幕间的切换
- Static和const的比较和解释
- 编程的乐趣所在
- ARP欺骗