chksum:=0;
   for i:=1 to MReceiveBufferLength-1 do
     chksum:=chksum xor Buffer[i-1];
异或让我头晕。

解决方案 »

  1.   

    按字節長,字節和都不是這個CHECKSUM算法到時看懂,就是不明白你這個。呵呵
      

  2.   

    异或运算,如果表达式中有一个而且只有一个值为   True,则   result   为   True。但是,如果表达式中有一个为   Null,则   result   也为   Null。当两个表达式都不为   Null,则根据下表来确定   result:   
      如果   expression1   为   且   expression2   为   则   result   为     
      True   True   False     
      True   False   True     
      False   True   True     
      False   False   False     
      

  3.   

    异或, DELPHI里是XOR,C/C++ 是 ^
    var
      I, J: Integer;
    begin
      I := 2;
      j := 3
      i xor J计算
     i 10
     j 11
    ------------
       01
    转换成十进制 就是1. 所以   i xor J 等于 1
      

  4.   


    到底是怎么实现的呢?
    我觉得异或很奇怪。如果一个buffer数组有五个成员并且都是1的话,当chksum初始为0与每一个成员分别异或,那结果chksum是1,如果是六个成员1的话,那结果就是0,与buffer[Msendbufferlength-1]相比较,这样准确吗?另外说明buffer[Msendbufferlength-1]是协议的总长度,这个总长度怎么可能是1或者0呢??是不是我理解的错误了?
      

  5.   


    我知道异或是怎么用的。您可不可以看看我的回复。我没有把代码贴全,请看: // check sum
       chksum:=0;
       for i:=1 to MReceiveBufferLength-1 do
             chksum:=chksum xor Buffer[i-1];
        if Buffer[MReceiveBufferLength-1]<>chksum then
        begin
         result:=false;
         exit;
        end;