📄 crch.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 + -