⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 crch.dpr

📁 CRC校验算法 CRC校验算法 CRC校验算法 CRC校验算法
💻 DPR
字号:
program crch;

{$APPTYPE CONSOLE}

uses
  SysUtils, CRC32;

procedure AddToFile(const buffer: Pointer; const Size:byte);
var f: file of byte;
begin
 AssignFile(f,ParamStr(1));
 Reset(f);
 try
  Seek(f,FileSize(f));
  Blockwrite(f,buffer^,size);
 finally
  CloseFile(f);
 end;
end;


var ReqCRC, CRC, dummie: Cardinal;
    Buffer: Pointer;
    i:Byte; j:Word;
    c: Cardinal;
begin
 if FileExists(ParamStr(1)) then CRC:=FileCRC32(ParamStr(1)) else Halt(1);
 ReqCRC:=StrToInt('$'+ParamStr(2));
 if ReqCRC = CRC then Halt(2);
 //1 byte
 for i:=0 to High(i) do begin
  Buffer:=@i;
  dummie:=CRC;
  CalcCRC(dummie,buffer,1);
  if dummie=ReqCRC then begin
    AddToFile(buffer,1);
    Halt(0);
  end;
 end;
 //2 bytes
 for j:=0 to High(j) do begin
  Buffer:=@j;
  dummie:=CRC;
  CalcCRC(dummie,buffer,2);
  if dummie=ReqCRC then begin
    AddToFile(buffer,2);
    Halt(0);
  end;
 end;
 //3 bytes
 GetMem(buffer,3);
 try
  For j:=0 to High(j) do begin
   PChar(buffer)[0]:=Chr(Hi(j));
   PChar(buffer)[1]:=Chr(Lo(j));
   for i:=0 to High(i) do begin
     PChar(buffer)[2]:=Chr(i);
     dummie:=CRC;
     CalcCRC(dummie,buffer,3);
     if dummie=ReqCRC then begin
       AddToFile(buffer,3);
       Halt(0);
     end;
   end;
  end;
 finally
  FreeMem(buffer,3)
 end;
 //4 bytes
 c:=0;
 repeat
  Buffer:=@c;
  dummie:=CRC;
  CalcCRC(dummie,buffer,4);
  if dummie=ReqCRC then begin
      AddToFile(buffer,4);
    Halt(0);
  end;
  c:=c+1;
 until c=4294967295;
 //4 bytes final
 Buffer:=@c;
 dummie:=CRC;
 CalcCRC(dummie,buffer,4);
 if dummie=ReqCRC then begin
  AddToFile(buffer,4);
  Halt(0);
 end;
end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -