首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何使用FreePascal(拉撒路)计算CRC32校验和?

如何使用FreePascal(拉撒路)计算CRC32校验和?
EN

Stack Overflow用户
提问于 2018-11-14 22:32:26
回答 2查看 702关注 0票数 1

我必须为我的大学做一些项目,我需要计算CRC32。但我之前几乎没有轮班工作,所以即使我读完理论,它仍然对我来说很难。我找到了一些用于C语言的CRC32 basic算法(不是我的),并尝试为拉撒路(Delphi)重写它。但它不起作用。我不明白,出什么事了。请帮助(*_ _)人

下面是我的代码:

代码语言:javascript
代码运行次数:0
运行
复制
procedure TMyFrame.CRC32_Checksum();
var
  P : Pointer;
  Size, i : Integer;
  CRC, j : LongWord;
  B : ^Byte;
  flag : Boolean;
begin
  AssignFile (f, FileName);
  Reset(f, 1);
  Size := FileSize(f);
  GetMem(P, Size);
  BlockRead(f, P^, Size);
  B := P;
  //
  //
  CRC := $FFFFFFFF;
  for i := 1 to Size do
    begin
      CRC := CRC XOR B^;
      Inc(B);
      for j := 0 to 7 do
        begin
          flag := (CRC AND 1) > 0;
          if flag then
            CRC := (CRC SHR 1) XOR $04C11DB7
          else
            CRC := CRC SHR 1;
        end;
      end;
  LabeledEdit1.Text := IntToHEX(CRC, 8);
  //
  //
  Freemem(P);
  CloseFile(f);
end;                   
EN

回答 2

Stack Overflow用户

发布于 2018-11-15 00:26:47

0xCBF439260x340BC6D9的逐位逆(“非”)。您只需对结果使用not,或对$FFFFFFFF使用exclusive或。

票数 3
EN

Stack Overflow用户

发布于 2018-11-15 18:32:12

请注意,FPC附带了一个CRC32单元。(来自上面Mark Adler的crc32.c )

这个单元有一个函数来计算一个名为crc32()的块的CRC。

代码语言:javascript
代码运行次数:0
运行
复制
  function crc32 (crc : cardinal; buf : Pbyte; len : cardinal): cardinal;

XOR包含在这个crc32.crc32()函数中。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53302601

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档