结构的确切结构并不重要。
从我收集的内容中,下面的c代码正在读取二进制数据的“块”(等于结构的大小)并直接将其写入结构(即前32个字节为name,接下来2个字节为attrib,等等)。 C#托管代码中是否有任何平等的东西?
请提供显示类似结果的代码snipet。为了节省时间,您可以简化为少数几个元素,并假设已经初始化了相应的文件流类型对象。
注意:我将使用现有的旧数据文件,因此现有数据文件的格式化/打包非常重要。我不能仅仅使用.net序列化/去除化,因为我将处理遗留的现有文件(改变格式是不可行的)。
typedef struct _PDB
{
char name[32];
unsigned short attrib;
unsigned short version;
unsigned int created;
unsigned int modified;
unsigned int backup;
unsigned int modNum;
unsigned int nextRecordListID;
unsigned short numRecs;
} PDB;
void getFileType(FILE *in)
{
PDB p;
fseek(in, 0, SEEK_SET);
fread(&p, sizeof(p), 1, in);
. . .
}
答案 0 :(得分:7)
我认为您在询问StructLayoutAttribute和FieldOffsetAttribute。
来自MSDN网站的示例(摘录):
[StructLayout(LayoutKind.Explicit, Size=16, CharSet=CharSet.Ansi)]
public class MySystemTime
{
[FieldOffset(0)]public ushort wYear;
[FieldOffset(2)]public ushort wMonth;
[FieldOffset(4)]public ushort wDayOfWeek;
[FieldOffset(6)]public ushort wDay;
[FieldOffset(8)]public ushort wHour;
[FieldOffset(10)]public ushort wMinute;
[FieldOffset(12)]public ushort wSecond;
[FieldOffset(14)]public ushort wMilliseconds;
}
答案 1 :(得分:2)
看一下编组,恕我直言,你在找什么。
此链接深入了解C#中的结构:
http://www.developerfusion.com/article/84519/mastering-structs-in-c/
可在MSDN的Marshal Class文档中找到更多信息:
http://msdn.microsoft.com/en-us/library/system.runtime.interopservices.marshal.aspx