处理文件中的数据引用/指针?
Posted
技术标签:
【中文标题】处理文件中的数据引用/指针?【英文标题】:Handling data references/pointers in a file? 【发布时间】:2012-04-27 00:43:05 【问题描述】:我正在使用二进制文件格式。我会尽量让这件事变得简单,因为这很难解释。
写入文件的数据结构可能包含“指针”(即指向文件中另一个位置的字符串的指针,或指向文件中另一个结构的指针。“指针”的更好用词' 将是 '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”值的位置并将其添加到我的重定位表中。
对不起,如果这没有意义。几周前我试着问过这个问题,但没有得到任何答复,我可能会让它听起来很混乱。
我只需要一种方法来跟踪我的代码中的所有这些...有什么提示吗?
附:如果您需要更详尽的示例,我很乐意提供。 :)
【问题讨论】:
Binary file format - data 'relocations'?的可能重复 【参考方案1】:使用数据库表 - 所有这些工作都已完成。
【讨论】:
【参考方案2】:您可能想查看其他方法来序列化和反序列化您的数据。除非您遇到非常特殊的情况,否则跟踪托管应用程序中的重定位和偏移是不必要的。如果您让我们更多地了解您在功能方面试图实现的目标,那么 SO 用户可以更好地指导您。
【讨论】:
其实是3D游戏的二进制文件格式。这些文件包含“结构”——如纹理、图标、文本字符串等。在文件的开头有数据“标识符”,其中包含到结构数据入口点的偏移量。我想出了一个解决方案,即拥有一个“位置”结构,其中包含每个结构的文件偏移量,这似乎工作正常。我只是想知道是否有更简单的方法可以做到这一点。 :)以上是关于处理文件中的数据引用/指针?的主要内容,如果未能解决你的问题,请参考以下文章