Как вычислить CRC (контрольную сумму) для файла?
01.01.2007
function GetCheckSum(FileName: string): DWORD; var F: file of DWORD; P: Pointer; Fsize: DWORD; Buffer: array [0..500] of DWORD; begin FileMode := 0; AssignFile(F, FileName); Reset(F); Seek(F, FileSize(F) div 2); Fsize := FileSize(F) - 1 - FilePos(F); if Fsize > 500 then Fsize := 500; BlockRead(F, Buffer, Fsize); Close(F); P := @Buffer; asm xor eax, eax xor ecx, ecx mov edi , p @again: add eax, [edi + 4*ecx] inc ecx cmp ecx, fsize jl @again mov @result, eax end; end; procedure TForm1.Button1Click(Sender: TObject); begin ShowMessage(IntToStr(GetCheckSum('c:\Autoexec.bat'))); end;
Взято с сайта https://www.swissdelphicenter.ch/en/tipsindex.php