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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Delphi中的按位补码。 (翻译C#〜运算符)相关的知识,希望对你有一定的参考价值。

我有C#代码来计算发送到特定串行设备的命令的校验和字节。我需要帮助将此函数转换为Delphi 10.x for 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);
}

德尔福代码

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;
答案
 Result := ((not Result) + 1) and $FF;

以上是关于Delphi中的按位补码。 (翻译C#〜运算符)的主要内容,如果未能解决你的问题,请参考以下文章

c语言的按位运算符怎么操作!?

位掩码 - C中的按位运算

Java中的按位运算

C语言里的按位异或运算符

Java的按位操作符

Java的按位操作符