gpt4 book ai didi

delphi - 在 Delphi 中读取/解析非类型二进制文件的最佳方法

转载 作者:行者123 更新时间:2023-12-02 20:03:02 24 4
gpt4 key购买 nike

我想知道解析非类型二进制文件的最佳方法是什么。例如,EBML 文件。 (http://ebml.sourceforge.net/)。 EBML 基本上是一个二进制 xml 文件。它基本上可以存储任何内容,但目前它的主要用途是 MKV 视频文件 (matroska)。

要在字节级别读取 EBML 文件,请读取 header 以确保它是 EBML 文件并检索有关文件的信息。 MKV 文件可能很大,大小为 1-30GB。

二进制文件可以是任何东西,jpeg、bmp、avi 等...我只是想学习如何阅读它们。

最佳答案

基本上,你会的

const
MAGIC_WORD = $535B;

type
TMyFileTypeHeader = packed record
MagicWord: word; // = MAGIC_WORD
Size: cardinal;
Version: cardinal;
Width: cardinal;
Height: cardinal;
ColorDepth: cardinal;
Title: array[0..31] of char;
end;

procedure ReadFile(const FileName: string);
var
f: file;
amt: integer;
FileHeader: TMyFileTypeHeader;
begin

FileMode := fmOpenRead;
AssignFile(f, FileName);

try
Reset(f, 1);

BlockRead(f, FileHeader, sizeof(TMyFileTypeHeader), amt);

if FileHeader.MagicWord <> MAGIC_WORD then
raise Exception.Create(Format('File "%s" is not a valid XXX file.', [FileName]));

// Read, parse, and do something

finally
CloseFile(f);
end;


end;

例如,位图文件以BITMAPFILEHEADER开头。结构,后面(在版本 3 中)是 BITMAPINFOHEADER 。接下来是可选的调色板项目数组,然后是未压缩的 RGB 像素数据(在最简单的情况下,此处为 24 位格式):BBGGRRBBGGRRBBGGRR...

另一方面,读取 JPG 则非常复杂,因为 JPG 数据的压缩方式需要大量高级数学才能理解(我认为 - 我实际上已经从未真正深入研究过 JPG 规范)。至少,对于许多现代图像文件格式来说都是如此。另一方面,BMP 是微不足道的——可能发生的“最糟糕”的事情是图像是 RLE 压缩的。

解析文件的“细节”完全取决于文件格式。文件格式规范告诉开发人员如何以二进制形式存储数据(上面的两个位图结构是 Windows 位图规范的一部分)。它就像一份契约(Contract),由此类文件的所有编码器/解码器签署(不是字面上的)。对于 EBML,规范似乎可用 here .

关于delphi - 在 Delphi 中读取/解析非类型二进制文件的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4309739/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com