0

我正在使用二进制文件格式。我会尽量让这件事变得简单,因为这很难解释。

写入文件的数据结构可能包含“指针”(即指向文件中另一个位置的字符串的指针,或指向文件中另一个结构的指针。“指针”的更好用词是'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如果您需要更详尽的示例,我很乐意提供。:)

4

2 回答 2

0

您可能想查看其他方法来序列化和反序列化您的数据。除非您遇到非常特殊的情况,否则跟踪托管应用程序中的重定位和偏移是不必要的。如果您让我们更多地了解您在功能方面想要实现的目标,那么 SO 用户可以更好地指导您。

于 2012-04-27T02:29:13.607 回答
0

使用数据库表 - 所有这些工作都已完成。

于 2012-04-27T00:55:13.463 回答