我正在使用二进制文件格式。我会尽量让这件事变得简单,因为这很难解释。
写入文件的数据结构可能包含“指针”(即指向文件中另一个位置的字符串的指针,或指向文件中另一个结构的指针。“指针”的更好用词是'offset',即一个结构包含文件中字符串的偏移量)。
一个简单的例子:
struct ExampleStruct {
public string Text;
public int Number;
};
'Text' 字符串成员将被写入文件的开头,并且不包含在序列化结构中。
因此,本质上,该结构在文件中将如下所示:
struct ExampleStruct {
public uint TextLocationOffset;
public int Number;
};
...'TextLocationOffset' 是文件中字符串'Text' 所在位置的偏移量。
所以,在我有了这个之后,我需要一个“重定位表”——本质上是一个指向文件中数据指针的双指针列表。(那有意义吗?)
因此,由于我将 ExampleStruct 写入了我的文件,并且它包含一个“指针”(TextLocationOffset),因此我的“重定位表”将包括:
public uint TextLocationOffset_LocationOffset;
...“TextLocationOffset_LocationOffset”包含文件中“TextLocationOffset”的偏移量。
这一切有意义吗?我试图尽可能地简化它。
我的问题是,我将如何跟踪 C# 中的所有指针/双指针/重定位?数据不断被添加到我拥有的 byte[] 数组中,因此偏移量将不断变化。
这在 C++ 中很容易,因为我可以获得正在“重新定位”的任何内容的双指针,然后我可以将原始“指针”(在我的示例中为“TextLocationOffset”)更改为正确的偏移量,然后我可以找到'TextLocationOffset' 值的位置并将其添加到我的重定位表中。
对不起,如果这没有意义。几周前我试着问过这个问题,但没有得到答复,我可能会让它听起来很混乱。
我只需要一种方法来跟踪我的代码中的所有这些......有什么提示吗?
PS如果您需要更详尽的示例,我很乐意提供。:)