提高Crc16计算的速度

Rem*_*mko 2 delphi crc delphi-2010

我需要在大文件上用$ 1021多项式计算Crc16校验和,下面是我当前的实现,但是在大文件上它相当慢(例如90 MB文件大约需要9秒).

所以我的问题是如何改进我当前的实现(使其更快),我用Google搜索并查看了一些实现表查找的示例但我的问题是我不明白如何修改它们以包含多项式(可能是我的数学失败了).

{ based on http://miscel.dk/MiscEl/CRCcalculations.html }
function Crc16(const Buffer: PByte; const BufSize: Int64;
  const Polynom: WORD=$1021; const Seed: WORD=0): Word;
var
  i,j: Integer;
begin
  Result := Seed;

  for i:=0 to BufSize-1 do
  begin
    Result := Result xor (Buffer[i] shl 8);

    for j:=0 to 7 do begin
      if (Result and $8000) <> 0 then
        Result := (Result shl 1) xor Polynom
      else Result := Result shl 1;
    end;
  end;

  Result := Result and $FFFF;
end;
Run Code Online (Sandbox Code Playgroud)

Ira*_*ter 6

如果您希望快速,则需要实现表查找CRC算法.

参见CRC错误检测算法索引V3.00(9/24/96)无痛指南 第10章