Мне нужно сделать какой-нибудь проект для моего колледжа, и мне нужно рассчитать CRC32. Но раньше я почти не работал со сменами, поэтому даже после прочтения теории мне все еще трудно. Я нашел какой-то базовый алгоритм CRC32 для C (не мой) и попытался переписать его для Lazarus (Delphi). Но это не работает. Я не могу понять, что не так. Пожалуйста, помогите (* _ _) 人
Вот мой код:
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;