【发布时间】:2014-02-12 15:09:02
【问题描述】:
我有一个定义了以下结构的 C 程序:
typedef struct{
DWORD id;
char name[256];
}ROW;
typedef struct{
DWORD Prev;
DWORD Next;
WORD ItemCount;
struct ROW Item[256];
} PAGE;
...有时程序会填充 PAGE 结构并将其写入磁盘文件。
现在,我需要从 C# 程序中读取此文件,但我不知道如何在 C# 中定义等效类,我尝试过的所有操作要么编译失败,要么引发异常。在 C 中,这是一项非常微不足道的任务,在 C# 中很可能也是如此,但是我是 C# 新手,还没有找到关于如何正确执行此操作的明确解释。
【问题讨论】:
-
你知道结构是打包还是对齐。如果对齐,则在
ItemCount和Item之间有两个字节的填充。我还怀疑存储到文件中的内容不一定包含所有 256 个ROW项目。我猜它只会包含其中的ItemCount。我想说您需要在Marshal.PtrToStructure和BinaryReader之间进行选择。你喜欢哪个?你知道这些问题的答案吗? -
结构已打包,编译器设置为使用 1 字节结构对齐...文件确实包含所有 256 行,无论是否使用。我在用 BinaryReader 还没试过 Marshal.PtrToStruct...你是专家,哪种情况最适合这种情况?
-
我想我会在这里使用
BinaryReader。PtrToStructure的原因涉及创建仅在读取文件时有用的结构类型。在您的 C# 代码中,您可能需要一个Row结构和一个包含List<Row>的Page类。您希望我在此基础上向您展示一些大纲代码吗?