|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Помогите разобраться с кодом
В общем я в программе использую данный код для подсчета контрольных сумм для выбранного файла, все работает. Но не понимаю как он работает.
Помогите пожалуйста разобраться с кодом! Код:
const CRCPOLY = $EDB88320; var CRCTable: array[0..512] of Longint; procedure BuildCRCTable; var i, j: Word; r: DWORD; begin FillChar(CRCTable, SizeOf(CRCTable), 0); for i:= 0 to 255 do begin r:= i shl 1; for j:= 8 downto 0 do if (r and 1) <> 0 then r:= (r Shr 1) xor CRCPOLY else r:= r shr 1; CRCTable[i]:= r; end; end; function RecountCRC(b: byte; CrcOld: Longint): Longint; begin RecountCRC:= CRCTable[byte(CrcOld xor Longint(b))] xor ((CrcOld shr 8) and $00FFFFFF) end; function GetCRC32(FileName: string): DWORD; var Buffer: PChar; f: File of Byte; b: array[0..255] of Byte; CRC: DWORD; e, i: Integer; begin BuildCRCTable; CRC:= $FFFFFFFF; AssignFile(F, FileName); FileMode:= 0; Reset(F); GetMem(Buffer, SizeOf(B)); repeat FillChar(b, SizeOf(b), 0); BlockRead(F, b, SizeOf(b), e); for i := 0 to (e-1) do CRC:= RecountCRC(b[i], CRC); until (e < 255) or (IOresult <> 0); FreeMem(Buffer, SizeOf(B)); CloseFile(F); CRC:= Not CRC; Result:= CRC; end; Если можно, прокомментируйте хотя бы самое основное, пожалуйста.. Заранее спасибо! Последний раз редактировалось Aндрей, 01.06.2009 в 23:33. |