checksum的计算和原理
来源:互联网 发布:微信可以打开淘宝 编辑:程序博客网 时间:2024/05/18 00:08
checksum的计算和原理
unsigned short CheckSum(char *addr, int count)
{
register int sum = 0;
while( count > 1 )
{
sum =sum+*(unsigned short*)addr;
addr+=2;
count -= 2;
}
if( count > 0 )//=1,说明count为奇数
sum += *addr;
while (sum>>16)//当和的高16位不为0,把高16位作为校验和的一部分求和,
sum = (sum & 0xffff) + (sum >> 16);
return (short)~sum;
}
/*****************************八位checksum*********************************/
char CheckSum(char *addr, int count)
{
UINT sum = 0;
while( count > 0 )
{
sum =sum+*addr;
addr += 1;
count -= 1;
}
while (sum>>8)
sum = (sum & 0xff) + (sum >> 8);
return (char)~sum;
}
原理:
1、校验和的计算:将缓冲区的数据中挨个数累加(X),然后取反输出(~X)。
2、校验:将缓冲区的数据和校验和(~X)一起求校验和,累加和(Y(及取反输出(~Y)。Y =缓冲区的数据累加(X(+校验和(~X)=0XFFFF。~Y=0。所以当结果为0,说明数据传输没问题。
如果校验和计算时高16位(XH)不等于零,(XH)+(XL)= Z,新校验和为~Z。 校验时,再次求校验和 :先求和(XH)*2^16 +(XL)+ ~Z= (XH)*2^16 +(XL)+ 0XFFFF - Z =(XH)*2^16+(0XFFFF -(XH))=Y.YH=XH,YL=(0XFFFF -(XH),YH+YL=0XFFFF.
- checksum的计算和原理
- 网络数据包效验和(checksum)的计算
- 网络数据包效验和(checksum)的计算
- IP头TCP头的checksum校验和计算
- network L4 checksum的计算和NAT之后的再计算
- 如何计算UDP/TCP检验和checksum
- 如何计算UDP/TCP检验和checksum
- 计算UDP/TCP检验和checksum
- IP数据报首部checksum的计算
- IP数据报首部checksum的计算
- IP/TCP/UDP中Checksum的计算
- tcp checksum计算
- innodb 计算checksum
- Checksum.ini的作用和生成
- Internet checksum 因特网检验和的算法
- 浅析pt-table-checksum和pt-table-sync原理
- WinCE分析Flash分区原则和块的分配是如何进行的以及CheckSum的原理和应用(转贴)
- Pt-table-checksum原理浅析
- jQuery选择器3
- Android 启动速度优化
- 25 WebGL的盒状可视投影
- MFC win32 Dll的创建和使用
- 微信小程序 IDE的安装以及安装过程的常见问题及 + Demo
- checksum的计算和原理
- 分针网“翻转课堂”引领在线教育新时代
- 设计模式详解——工厂模式(三)
- spring框架的学习(一)之我们为什么要用spring框架
- session 对象-6.13
- MongoDB 数组遍历操作 forEach
- 键值表kernel/include/uapi/linux/input.h
- 内存管理实验_STM32F1开发指南_第四十二章
- Java+MySQL实现网络爬虫程序