![]() |
![]() ![]() ![]() ![]() |
|
Модуль для подсчета CRC64Delphi , Синтаксис , ШифрованиеАвтор: Nikonov A.A.
unit psnCRC64;
interface
uses Classes;
procedure CRC64Next(const Data; const Count:
Cardinal; var CRC64: Int64);
function CRC64Full(const Data; const Count:
Cardinal): Int64;
function CRC64Stream(const Source:
TStream; Count: Integer; const BufSize:
Cardinal = 1024): Int64;
implementation
var T: array[Byte] of Int64;
procedure CRC64Next(const Data; const Count:
Cardinal; var CRC64: Int64);
var
MyCRC64: Int64;
I: Cardinal;
PData: ^Byte;
begin
PData := @Data;
MyCRC64 := CRC64;
for I := 1 to Count do
begin
MyCRC64 := MyCRC64 shr 8 xor T[Cardinal(MyCRC64)
and $FF xor PData^];
Inc(PData);
end;
CRC64 := MyCRC64;
end;
function CRC64Full(const Data; const Count:
Cardinal): Int64;
begin
Result := not 0;
CRC64Next(Data, Count, Result);
end;
function CRC64Stream(const Source:
TStream; Count: Integer;
const BufSize: Cardinal = 1024): Int64;
var
N: Cardinal;
Buffer: Pointer;
begin
if Count '<';
0
then Count := Source.Size;
GetMem(Buffer, BufSize);
try
Result := not 0;
while Count '<';
'>';
0 do
begin
if Cardinal(Count)'>';
BufSize
then
N := BufSize
else
N := Count;
Source.ReadBuffer(Buffer^, N);
CRC64Next(Buffer^, N, Result);
Dec(Count, N);
end;
finally FreeMem(Buffer);
end;
end;
var
I, J: Byte;
D: Int64;
initialization
for I := 0 to 255 do
begin
D := I;
for J := 1 to 8 do
if Odd(D)
then D := D shr 1 xor $C96C5795D7870F42
else D := D shr 1;
T[I] := D;
end;
end.
/////////////////////////////////////
// Данные в модуль можно загнать так
procedure TForm1.Button1Click(Sender: TObject);
var
InFile: TFileStream;
begin
InFile := TFileStream.Create(fname, fmShareDenyNone);
Caption := INTTOHEX(CRC64Stream(INFILE, SIZEOF(INFILE), 1024), 16);
end;
Программный модуль на языке Delphi для расчета контрольной суммы CRC64 потока или блока данных. Модуль предоставляет три процедуры: Описание каждой процедуры:
Модуль также включает в себя секцию инициализации, которая инициализирует массив В примере кода показан обработчик события нажатия кнопки на форме, который создает объект Код использует следующие техники:
Код хорошо организован и легко понятен, но некоторые части могут быть улучшены:
В целом, это хороший пример реализации калькулятора CRC64 в Delphi, но он может быть улучшен с помощью некоторых оптимизаций и обработки ошибок. Модуль psnCRC64 для подсчета CRC64 в Delphi, содержит процедуры и функции для расчета CRC64 на фрагментах данных, а также для работы с потоками. Комментарии и вопросыПолучайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш :: Главная :: Шифрование ::
|
||||
©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007 | ||||