C#BinaryReader从未知结构中读取字节

时间:2013-08-14 08:49:46

标签: c# header binary structure binaryreader

我正在尝试读取包含目录和文件条目的存档文件。 我已经设法读出文件的标题并获取信息。

您可以找到有关格式here

的信息

现在该文件包含一个目录模块,该模块从文件原点起2048字节后开始。

我所知道的是TOC可以包含两件事:

遵循以下结构的目录条目:

  • 4bytes:int32:条目名称存储位置的名称偏移量
  • 4bytes:int32:信息标志,4个字节中的每个位都包含有关某些内容的信息
  • 4bytes:Uint32:内容条目索引
  • 4bytes:uint32:内容条目数

fileentry遵循以下结构:

  • 4bytes:int32:名称偏移量
  • 4bytes:int32:文件大小
  • 3bytes:Uint24:文件存储位置的偏移量
  • 1byte:Uchar8:资源类型
  • 4byte:uint32:信息标志

现在这适用于每个目录条目或文件条目。

问题是我不知道toc中的第一个或每个条目的顺序是什么,这是未知的。

我所知道的是来自文件头,是条目数,因此有多少条目和目录大小。

有没有找到二进制阅读器以什么形式阅读每个条目或找出它是什么特定类型的条目?

我将使用for循环,因为我知道标题中的条目数。

任何帮助都是apreciated

1 个答案:

答案 0 :(得分:0)

好吧,二进制阅读器无法确定它自己读取的数据类型。它只是读取一个字节序列。你应该解释那些字节。如果您不知道用于编写源文件的协议,那么最好的办法是尝试通过反复试验来搞清楚,做出有根据的猜测。您可以假设目录条目先行,您可以假设文件条目在第一个目录条目的第一个内容索引之后开始。等等。然后你应该运行你的应用程序,看看,如果这些猜测是有道理的。

如果首先没有协议,并且初始数据是以随机顺序写的 - 那么就没有办法区分具有相关信息的条目。