Delphi中的LRC校验和

时间:2011-09-15 11:03:42

标签: c++ delphi checksum

我正在尝试将C代码转换为Delphi / pascal,但不知怎的,我无法让它工作,我的方法是这样的:

function CheckLRC(s : PChar) : Char;
var
  sum : char;
begin
  sum := #0;
  while (^s <> #0) do
  begin
    sum := (sum XOR ^s);
    inc (s)
  end;
  result := sum;
end;

原始C代码是:

   Set LRC = 0
   For each byte b in the buffer
   do
     Set LRC = (LRC + b) AND 0xFF
   end do
   Set LRC = (((LRC XOR 0xFF) + 1) AND 0xFF)

希望有人能够帮助我,并且可以确认这是进行LRC校验和的正确方法吗?

1 个答案:

答案 0 :(得分:3)

我猜这个函数的确切等价可能是:

function CheckLRC(const s: AnsiString): byte;
var i: integer;
begin
  result := 0;
  for i := 1 to length(s) do
    inc(result,ord(s[i]));
  result := (result xor $FF)+1; // or result := (not result)+1;
end;

此处不需要原始代码中的所有“和$ FF”,因为我们使用byte作为结果。