我知道检验和的计算方法,但为什么要这样算,我在接收端算出来的值为0正确吗?
谢谢

解决方案 »

  1.   

    请问咕嘟,CHECKSUM程序中有最后好句不明
    checksum=(checksum>>16)+(checksum&0xffff);
    checksum+=(checksum>>16);
    return (unsigned short)(~checksum);
    为什么要加上CHECKSUM自己呢。
      

  2.   

    主要是当checksum的位数>16时所进行的计算。
    因为checksum是unsigned short 即16位。
    checksum=(checksum>>16)+(checksum&0xffff); //高16位和低16位相家
    checksum+=(checksum>>16); // 如果上面的结果仍然 >16 位return (unsigned short)(~checksum);//取反