我需要在大文件上使用 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;