delphi中如何用16进制方式读入文件?(100分)

  • 主题发起人 主题发起人 kowity
  • 开始时间 开始时间
K

kowity

Unregistered / Unconfirmed
GUEST, unregistred user!
比如,我想让程序读入一个文件,然后查找文件中是否有 FE DE 4D这一串16进制字符,
如果有就....如果没有就....,这样的程序如何写?请举个例子
 
用流,然后直接比较就可以了
 
具体如何做?
 
你到底要怎么做?
 
procedure TForm1.Button1Click(Sender: TObject);
var
Stream : TFileStream;
Buffer : array[0..2] of Byte;
Offset : Longint;
bFound : Boolean;
begin
Stream := TFileStream.Create('C:/COMMAND.COM', fmOpenRead);
try
with Stream do
begin
while Position <> Size do
begin
Seek(Offset, soFromBeginning);
ReadBuffer(Buffer, 3);
if (Buffer[0] = $FE) and (Buffer[1] = $DE) and (Buffer[2] = $4D) then
begin
ShowMessage('找到了');
Break;
end;
Inc(Offset);
end;
end;
finally
Stream.Free;
end;
end;
 
tseug兄的办法可以解决问题,但是效率很低,上面那段代码可以这样改一下:
Stream := TFileStream.Create('C:/COMMAND.COM', fmOpenRead);
try
with Stream do
begin
while Position < Size do
begin
Seek(Offset, soFromBeginning);
ReadBuffer(Buffer, 100)
//这里作改动,使每次取的字符个数为100,或更大
if pos(#$fe#$de#$4d,buffer)>0 then //这里没作测试,差不多是可以的.
begin
ShowMessage('找到了');
Break;
end;
Offset=Offset+97;//加97的原因是在取BUFFER时,可能将这三个连续的字符分开
end;
end;
finally
Stream.Free;
end;
 
:ajj:写得好!
 
后退
顶部