大きなファイルに対して $1021 多項式で Crc16 チェックサムを計算する必要があります。以下は私の現在の実装ですが、大きなファイルではかなり遅いです (たとえば、90 MB のファイルでは約 9 秒かかります)。
したがって、私の質問は、現在の実装を改善する方法 (より高速にするため) です。ググって、テーブル ルックアップを実装するいくつかのサンプルを調べましたが、問題は、多項式を含めるようにそれらを変更する方法がわからないことです (おそらく私の数学は失敗です)。
{ 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;