冥界3大法王 发表于 2024-2-6 09:07

如何用Delphi把任意文件的16进制读取出来?

内容就是WinHex中看到的16进制内容{:301_974:}

homejun 发表于 2024-2-6 09:42

本帖最后由 homejun 于 2024-2-6 09:47 编辑

function FileToHex(const AFileName: string): string;
var
Stream: TFileStream;
Buffer: array of Byte; // 每次读取最多256个字节
BytesRead: Integer;
begin
Result := '';
try
    try
      Stream := TFileStream.Create(AFileName, fmOpenRead);

      while True do
      begin
      BytesRead := Stream.Read(Buffer, SizeOf(Buffer));

      if BytesRead = 0 then
          Break;

      for var I := 0 to BytesRead - 1 do
          Result := Format('%s %.2x', ]);
      end;
      
      Result := Trim(Result);

    except
      on E: Exception do
      ShowMessage('Error reading file: ' + E.Message);
    end;
finally
    Stream.Free;
end;
end;

冥界3大法王 发表于 2024-2-6 09:49

本帖最后由 冥界3大法王 于 2024-2-6 10:00 编辑

@@homejun

那下面这个有用(沾边)吗?

procedure TForm7.Button1Click(Sender: TObject);
var
Mem: TMemoryStream;
buf: array of Byte; // 下界为0所以减1
begin
Mem := TMemoryStream.Create;
Mem.LoadFromFile('abc.dat');
// 读入处理
FillChar(buf, SizeOf(buf), 0);
Mem.Position := 0;
Mem.Read(buf, SizeOf(buf));


// 写入
Mem.Clear;
Mem.Position := 0;
Mem.Write(buf, SizeOf(buf));
Mem.SaveToFile('abc.dat');
Mem.free;
end;

冥界3大法王 发表于 2024-2-6 09:53


效果正确,非常感谢!
页: [1]
查看完整版本: 如何用Delphi把任意文件的16进制读取出来?