这两天在做个接收海量数据的项目,服务端接收处理客户端发送上来的数据。本来没什么可以多说的,但中间出了个有趣的插曲,让我折腾半天不管怎么调就是不对。原来是一有个性的哥们在做数据校验和时,出于自己的兴趣爱好更改协议中约定的校验值计算方法,用了他常用或偏爱的那种方法。本来想让他修改的,可出于升级工作和服务端刚建设的综合考虑,最后还是采取了服务端更改检验和计算方式的做法。为纪念为之付出艰辛调试的几个小时,在此立字铭记。
C++计算CheckSum的方法:
unsigned short CAoe::CheckSum(unsigned short *buffer, int size)
{
unsigned long cksum=0;
while( size>1 )
{
cksum+=*buffer++;
size-=sizeof(unsigned short);
}
if( size )
{
cksum+=*(unsigned char *)buffer;
}
while (cksum>>16)
{
cksum=(cksum>>16)+(cksum & 0xffff);
}
return (unsigned short) (~cksum);
}
Java计算CheckSum的方法:
public char checkSum(byte[] buf, int size) {
long ckSum = 0;
for (int i = 0; i < size - 1; i += 2) {
ckSum += (((buf[i + 1] << 8) & 0xff00) ^ (buf[i] & 0xff));
}
if (size % 2 == 1) {
ckSum += buf[size - 1] & 0xff;
}
ckSum = (ckSum >> 16) + (ckSum & 0xffff);
ckSum += (ckSum >> 16);
return (char) (~ckSum);
}
分享到:
相关推荐
使用checksum进行差错检测,类似于udp的差错检测方式,使用回卷加法,之后将加和进行反码运算,放在数据的最开头,并且回卷加法使用8比特加法。
checksum校验和计算工具,16进制校验和计算工具,简单实用。
效验和(checksum) 原理:把要发送的数据看成二进制整数序列,并计算他们的和。若数据字节长度为奇数,则在数据尾部补一个字节的0以凑成偶数。 为了计算效验和,发送计算机把每对字符当成16位整数处理并计算效验...
能够实现labVIEW 计算校验和 并能够检验校验和是否正确
windows中checksum校验算法:求解网络报文中的checksum
IP TCP UDP checksum计算c代码,包含checdsum原理说明,以及实现c代码,用于验证网络平时收发包checksum问题
求一个文件夹里包含的所有文件的CHECKSUM,VC++源代码
计算checksum文件的程序,我们在单片机编程烧录中经常会用到计算目标文件(HEX/BIN))的16位累加和的checksum的工具,这个是我在工作中遇到问题后自己编写的一个,支持NEC、8051、瑞萨、三星等单片机编译软件产生的...
使用C#开发文件校验和工具,计算烧录文件的内容的文件的校验和CheckSum。
将十六进制字符串中的数(长度不限)累加求和,取累加和最低一个字节,生成CheckSum校验码。例如十六进制字符串:01 03 00 10 00 4D 31 30 30 20 32 36 64 42 6D 20 56 31 2E 30,生成CheckSum校验码为92(十六进制)...
计算十六进制的CheckSum
checksum offload理解
NXP使用处理器向量表的一个word存储校验和(checksum),引导程序审查该校验和以确定是否是有效程序。对于ARM7/ARM9,这个校验字存储在偏移0x14的地址上,而Cortex-M存储在偏移0x1C的地址上。由于GNU ARM产生的二进制...
既然您已经了解了编写Java程序来计算校验和的能力,那么您的任务就是用C编写相同的程序。但是,该算法在循环内逐步执行校验和的算法有所不同。 该算法在课堂上进行了描述。 同样在此实现中,您必须使用信号“读取”...
本程序实用,小巧,用于对文件做校验和并保留记录,方便将来文件版本检查。
网络协议/如何计算IP UDP TCP检验和checksum.pdf
在通讯技术开发过程中往往需要用到校验和,调试过程中需要计算校验和正确与否?用此工具很方便计算出校验和。 使用说明:在输入文本框中以十六进制输入一串需要计算的数据(以空格分开,不需要0x开头),如输入: 15 ...
Linux C语言实现的计算文件夹的checksum功能
checksum工具软件,对每个文件checksum有一个四位的十六进制代码,防止文件重复,便于区分
物联网 硬件工程师 新能源汽车 相关文档