`
victorwmh
  • 浏览: 212741 次
  • 性别: Icon_minigender_1
  • 来自: 宇宙
社区版块
存档分类
最新评论

和C++相对应Java的CheckSum

    博客分类:
  • java
 
阅读更多

这两天在做个接收海量数据的项目,服务端接收处理客户端发送上来的数据。本来没什么可以多说的,但中间出了个有趣的插曲,让我折腾半天不管怎么调就是不对。原来是一有个性的哥们在做数据校验和时,出于自己的兴趣爱好更改协议中约定的校验值计算方法,用了他常用或偏爱的那种方法。本来想让他修改的,可出于升级工作和服务端刚建设的综合考虑,最后还是采取了服务端更改检验和计算方式的做法。为纪念为之付出艰辛调试的几个小时,在此立字铭记。

 

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);
}
 
分享到:
评论
2 楼 victorwmh 2012-09-28  
我们项目是Java项目,但数据源来自不同的地方,有些还是合作单位提供的。
1 楼 cuisuqiang 2012-09-27  
那你们到底是Java项目还是C++的项目?

相关推荐

    使用C++ checksum进行差错检测【100011679】

    本篇将深入探讨如何使用C++实现基于回卷加法的校验和计算,以此来进行差错检测。 首先,我们要理解什么是校验和。校验和是一种简单的错误检测机制,通过计算数据的二进制加法和,然后对结果取反,将得到的反码作为...

    checksum校验和计算工具

    当数据发生变化时,对应的校验和也会变化。常见的校验和算法有CRC(Cyclic Redundancy Check)和MD5(Message-Digest Algorithm 5)等。这些算法通过一系列数学运算对数据进行处理,生成的校验和可以用来检测数据的...

    CheckSum 校验和工具

    当文件的任何部分发生变化时,对应的校验和也会改变,这使得校验和成为检查文件是否被篡改或损坏的有效手段。 二、CheckSum工具的原理 CheckSum工具通过计算文件的校验和来判断文件的完整性。常见的校验和算法有MD...

    计算校验和 checksum

    效验和(checksum)  原理:把要发送的数据看成二进制整数序列,并计算他们的和。若数据字节长度为奇数,则在数据尾部补一个字节的0以凑成偶数。 为了计算效验和,发送计算机把每对字符当成16位整数处理并计算效验...

    CheckSum_checksum_报文头checksum_计算机网络_windows中checksum_

    在计算机网络中,报文头中的Checksum,也称为校验和,是一种用于检测数据传输错误的重要机制。这个机制确保了在网络通信过程中数据的完整性。在Windows操作系统中,Checksum的计算通常涉及TCP/IP协议栈,特别是在IP...

    求文件夹里所有文件的CHECKSUM

    常见的CHECKSUM算法有CRC(Cyclic Redundancy Check)、MD5(Message-Digest Algorithm 5)和SHA系列(Secure Hash Algorithm)等。 在VC++中,我们可以使用标准库或者第三方库来计算文件的CHECKSUM。例如,对于...

    CheckSum_checksum_CheckSumMFCC++_

    标题"CheckSum_checksum_CheckSumMFCC++_"提及了校验和与"CheckSumMFCC++"的关联,这可能是指一个特定的C++库或者程序,用于处理与MFCC(Mel Frequency Cepstral Coefficients)相关的数据时计算校验和。 MFCC是...

    IP/TCP/UDP checksum计算c代码

    IP/TCP/UDP checksum(校验和)就是一种确保数据完整性的方法。本文将深入探讨这些协议的校验和计算原理,并提供C语言实现的代码示例。 首先,让我们理解一下校验和的基本概念。校验和是一种简单的错误检测机制,它...

    文件校验器Checksum源代码

    1. `CheckSum.aps`:这是Microsoft Visual C++项目的编译中间文件,包含了项目设置和资源信息。 2. `CheckSum.bbs`:这可能是一个历史遗留的备份文件,通常不包含源代码,但可能保存了项目的一些配置信息。 3. `...

    checksum.rar

    "checksum.rar"是一个专用于计算16进制数据累加和的工具,其核心功能是基于C++编程语言实现的。本文将深入解析该工具的工作原理、使用方法以及相关知识点。 首先,我们需要理解什么是校验和。校验和,顾名思义,是...

    CheckSum.rar_checksum C#_checksum 工具_checksum工具_工具 校验_文件校验

    在IT领域,校验和(Checksum)是一种用于验证数据完整性的技术。它是通过特定算法对文件或数据块进行计算得出的一个简短固定长度的值。当数据传输或存储后,可以通过再次计算校验和并与原始值比较来检测数据是否发生...

    校验和CheckSum获取工具

    在通讯技术开发过程中往往需要用到校验和,调试过程中需要计算校验和正确与否?用此工具很方便计算出校验和。 使用说明:在输入文本框中以十六进制输入一串需要计算的数据(以空格分开,不需要0x开头),如输入: 15 ...

    cheksum.rar_LabView校验和_checksum labview_labview checksum_labview

    能够实现labVIEW 计算校验和 并能够检验校验和是否正确

    一个用来计算烧录资料文件的校验和(CHECKSUM)的程序

    计算checksum文件的程序,我们在单片机编程烧录中经常会用到计算目标文件(HEX/BIN))的16位累加和的checksum的工具,这个是我在工作中遇到问题后自己编写的一个,支持NEC、8051、瑞萨、三星等单片机编译软件产生的...

    CheckSum校验和工具

    在IT领域,校验和(Checksum)是一种广泛用于数据验证的技术,它通过对数据进行特定算法计算,生成一个简短的固定长度的数值,这个数值能够反映原始数据的完整性。如果数据在传输或存储过程中发生任何改变,重新计算...

    checksum-offloads.docx

    - 隧道封装及对应的校验和计算都由协议栈实现,但在计算过程中无需再次扫描内层报文和Payload。 - 网卡仅需支持inner_cksum的计算,不需支持outer_cksum的计算。 ### Remote Checksum Offload (RCO) #### 技术原理...

    CheckSum_Gen.rar

    运行"CheckSum_Gen.exe",它可以重新计算并更新CheckSum.ini中的值,确保与刷机相关的文件校验和正确,从而消除刷机过程中的错误提示。 "CheckSum_Gen.exe"可能是由开发"Flash_Tool"的团队提供的辅助工具,专门设计...

    汽车通讯LIN协议中校验checksum及PID计算函数原型

    本篇文章将深入探讨LIN协议中的校验机制,特别是Checksum和PID(Packet Identifier)的计算,并提供相关的函数原型。 首先,我们来看标准的LIN协议校验Checksum。Checksum是为了确保数据在传输过程中没有错误而引入...

    Linux C语言实现的计算文件夹的checksum功能

    8. **结果输出**:计算完成后,程序应将每个文件的路径和对应的checksum输出到标准输出或文件中,以便用户核对或进一步处理。 9. **编译与链接**:在实际开发过程中,需要使用`gcc`或`clang`等编译器将源代码编译成...

Global site tag (gtag.js) - Google Analytics