Delphi中的LRC校验和
LRC checksum in Delphi
我正试图将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校验和的正确方法?
我猜这个函数的确切等价可能是:
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
。
相关文章:
- 如何用尽可能少的数据将数据缓冲区计算为零校验和值
- 计算校验和的逐位运算符
- 如何从存储在 QByteArray 中的十六进制值计算校验和
- 如何在 c++ 中计算对象的哈希/校验和/指纹?
- C++文件传输的校验和算法
- 如何从 IP 校验和字段中计算十六进制值
- 计算句子的校验和(XOR)(由不同变量/类型的组合形成)
- 目录校验和
- 编译后如何计算某些二进制功能(或基本块)的校验和
- PMS5003带有ESP8266-许多校验和错误
- 未正确的校验和释放对象 - 打印时错误
- 将C++校验和函数转换为 Java
- 确定是否使用boost.asio计算UDP校验和
- 校验和CRC 16从C 到Java
- 不同的CRC32校验和同一文件
- Qt,tcp/ip通信校验和
- 正在计算ICMP数据包校验和
- 错误的校验和错误遍布程序
- 如何计算 dmg 文件上的主校验和和数据分叉校验和
- Delphi中的LRC校验和