我正在尝试使用 Lazarus 学习 Free Pascal,我的一个宠物项目涉及读取一组特定的无类型文件的 64 字节标题,这些文件无法使用文本或 ASCII 相关程序读取和显示(因此不能直接输出到备忘录框等)。
到目前为止,我已经设计了以下代码,我认为它确实读取了标头的 64 个字节,并且我正在使用 TStreams 和“选择目录”对话框来执行此操作,基于通过 Lazarus IRC 收到的建议。我的问题是如何实际使用从标头读入缓冲区的数据?例如,在标题中,有 8 个字节的序列,然后是 16 个字节,然后是 2 个字节,依此类推,我想“处理”以生成其他输出,这些输出最终将转换为字符串以进入我的字符串网格.
到目前为止,我所拥有的一些内容是基于我在这里发现的由 Mason Wheeler 写的接近尾声(http://stackoverflow.com/questions/455790/fast-read-write-from-file-in-delphi),但它只说明如何读入,不说明如何使用。我也读过这个(http://stackoverflow.com/questions/4309739/best-way-to-read-parse-a-untyped-binary-file-in-delphi),但它再次向您展示了如何读取数据也是,但随后不使用数据。收到任何指导!到目前为止,下面的代码只是将单值整数输出到编辑框,而不是例如 8 个十六进制值的范围。
PS - 我是编程新手,所以请温柔!没什么太复杂的。
procedure TForm1.ProbeFile(FileIterator: TFileIterator);
type
TMyHeader = Array[1..64] of packed record
First8Bytes,
Next16Bytes,
Next2Bytes: byte;
end;
var
FI : TFileIterator; //File Iterator class
SG : TStringGrid;
NumRead : SmallInt;
FileToProbe: TStream;
header: TMyHeader;
begin
FI := TFileIterator.Create;
SG := TStringGrid.Create(self);
// Open the file and read the header
FileToProbe := TFileStream.Create(FileIterator.FileName, fmOpenRead);
try
FileToProbe.seek(0, soFromBeginning);
FileToProbe.ReadBuffer(header, SizeOf(header));
edit1.text := IntToStr(header[0].First8Bytes); // Just outputs '0' to the field? If I try '10' it ooutputs '29' and so on
finally
FileToProbe.Free;
end;