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

本文关键字:读取 字节 结构 未知 C#BinaryReader | 更新日期: 2023-09-27 18:27:40

我正在尝试读入一个包含目录和文件项的归档文件。我已经读出了文件的标题并得到了信息。

你可以在这里找到有关格式的信息

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

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

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

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

文件条目遵循以下结构:

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

现在,这对于每个目录条目或文件条目都是相同的。

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

我所知道的是,从文件头,是条目计数,所以有多少条目和目录大小。

有没有办法用二进制阅读器找出我需要以什么形式阅读其中的每个条目,或者找出它是什么特定类型的条目?

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

任何帮助都被视为

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

好吧,二进制读取器无法自行确定读取的数据类型。它只是读取一个字节序列。你是那个应该解释这些字节的人。如果用于编写源文件的协议对您来说是未知的,那么您最好的选择是尝试通过反复尝试来找出它,并进行有根据的猜测。您可以假设目录条目位于第一个目录条目的第一个内容索引之后,也可以假定文件条目开始于第一个目录项的第一个属性索引之后。等等。然后你应该运行你的应用程序,看看这些猜测是否有意义。

如果一开始没有协议,并且初始数据是按随机顺序写入的,那么就没有办法用你所掌握的信息来区分条目。