JAVA校验和算法和C++的结果不同
近日小弟又碰到一个问题,被捆饶许久。现在此想各位求助,还往不吝赐教。小弟比较穷,倾囊相送20分以表谢意。
现在需要做一个程序与现有的软件通信。现有的软件是C++写的,其中通信消息中包含的校验和算法是从网络上找来的,本身是错误的,但是现在已经发版本了没法修改,所以我也不得不照着写个java版的错误校验和算法。可是完成后计算出的值却始终不同。我也查不出是哪的问题。
c++版本:
//CheckSum:计算校验和的子函数
USHORT CheckSum(USHORT *buffer,int size)
{
USHORT cksum=0;
while(size > 1)
{
cksum += *buffer++;
size -= sizeof(USHORT);
}
if(size) cksum += *buffer;
cksum = (cksum > > 16) + (cksum & 0xffff);
cksum += (cksum > > 16);
return ~cksum;
}
=================================================================
java版本
public char checkSum(byte[] buffer, int length){
char cksum=0;
int k=0;
while(length> 1){
if (k> (length/2)) break;
cksum += (char) ((buffer[k*2] < <8)+ buffer[k*2+1]);
length-=2;
k+=1;