Delphi中的LRC校验和

发布于 2024-12-05 00:56:27 字数 492 浏览 1 评论 0原文

我正在尝试将 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 校验和的方法?

I am trying to convert a C code to Delphi/pascal, but somehow I cannot get it to work, my approach was like this :

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;

Original C code was :

   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)

Hope anyone out there is able to help me, and can confirm this is the correct way to do an LRC checksum ?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

尬尬 2024-12-12 00:56:27

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

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;

原始代码中的所有“and $FF”在这里都是不需要的,因为我们使用 byte 作为结果。

I guess the exact equivalence of this function may be:

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;

All "and $FF" in original code is unneeded here, since we are using a byte as result.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文