checksum的计算和原理

news/2024/5/17 15:50:56 标签: 校验和, udp, tcp, 网络, socket编程

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.


http://www.niftyadmin.cn/n/1685470.html

相关文章

使用TensorFlow拟合三元函数

定义三元函数w(x,y,z)exp(x)y^2sqrt(z),输入100组数据作为训练集,另取20组数据作为测试集。代码如下: import tensorflow as tf import numpy as np import xlrddef ReadData():book xlrd.open_workbook("E:\\1_temp\\data.xls")…

srand rand RAND_MAX

stdlib.h头文件中有宏#define RAND_MAX 0x7fff rand()产生一个0到0x7ffff即0到32767之间的随机数 rand()/(RAND_MAX1.0)就等于一个0到1之间的小数了,因为rand()最大是32767最小是0,再除以32768就是一个0到1之间的小数(不能等于1),再乘以10就是一个0到10之间的数了(不等于10).最…

基于Keras的二分类网络与基于sklearn的cart_tree决策树预测泰坦尼克号生还乘客对比

本文数据来自Kaggle。首先对数据进行处理,删除年龄为空的行。将年龄转化为年龄段,0-10岁为0,11-20岁为1,以此类推。将性别转化为数字,1表示male,2表示female。处理后的数据如图所示。 本文所选择的特征为Pcalss, Sex, …

vue项目中使用jsonp方法

jsonp虽然是一项古老的技术,但是有时候没它不行,项目里面有个插件提供的就是使用jsonp的方式回调,所以总结一下jsonp的使用方法。 第一种,直接使用jquery提供的jsonp方法,我这里使用的是jquery的3.6.0版本&#xff0c…

pandas学习笔记2

import numpy as np import pandas as pddate pd.date_range(start2018-7-1, end2018-12-21, freqD) df pd.Series(np.random.rand(len(date)), indexdate) #生成日期为index的dataframesum_wednesday df[df.index.weekday2].sum() #求…

python全站爬虫

通过正则表达式找到当前页面中的所有URL,储存在set中(剔除重复),用类似图数据结构的深度优先遍历算法遍历set,实现全站爬虫。 from urllib import request from bs4 import BeautifulSoup as bs import re import tim…

kindeditor 隐藏网络图片功能,只保留本地上传功能,并且将图片进行压缩处理

kindeditor 隐藏网络图片功能,只保留本地上传功能,并且将图片进行压缩处理 在使用kindeitor的时候,我们往往在使用图片功能的时候,包含两个部分,网络图片功能和本地上传功能,本文就告诉你如何隐 藏网络图片…

支持向量机分类模型

#-*- coding: utf-8 -*- import pandas as pdinputfile ../data/moment.csv #数据文件 outputfile1 ../tmp/cm_train.xls #训练样本混淆矩阵保存路径 outputfile2 ../tmp/cm_test.xls #测试样本混淆矩阵保存路径 data pd.read_csv(inputfile, encoding gbk) #读取数据&…