日期:2014-05-20  浏览次数:20931 次

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;