代码之家  ›  专栏  ›  技术社区  ›  Freddie Bell

Delphi中的位补码。(翻译C#运算符)

  •  0
  • Freddie Bell  · 技术社区  · 6 年前

    我有C#代码,用于计算发送到特定串行设备的命令的校验和字节。我需要帮助把这个函数翻译成Delphi 10。x代表Windows,也代表Delphi Android(如果不同的话)。

    C#代码

    public byte CheckSum(byte[] btAryBuffer, int nStartPos, int nLen)
    {
       byte btSum = 0x00;
       for (int nloop = nStartPos; nloop < nStartPos + nLen; nloop++ )
       {
          btSum += btAryBuffer[nloop];
       }
       return Convert.ToByte(((~btSum) + 1) & 0xFF);
    }
    

    Delphi代码

    function CalcCheckSum(buffer: TArray<byte>; nStartPos: Integer; nLen: Integer): Byte;
    var i: Integer;
    begin
      Result := 0;
      i := nStartPos;
      while i < nStartPos + nLen do
      begin
         Result := Result + buffer[i];
         Inc(i);
      end; 
      Result := ???
    end;
    
    1 回复  |  直到 6 年前
        1
  •  3
  •   Henk Holterman    6 年前
     Result := ((not Result) + 1) and $FF;