结构的确切结构并不重要。
从我收集到的以下 C 代码正在读取二进制数据的“ block ”(等于结构的大小)并将其直接写入结构(即前 32 个字节为名称,接下来的 2 个字节为属性, ETC)。 C# 托管代码中是否有任何等效项?
请提供显示类似结果的代码片段。为了节省时间,您可以将 简化为只有几个元素,并假设适当的文件流类型对象已经初始化。
注意:我将使用现有的遗留数据文件,因此现有数据文件的格式/打包很重要。例如,我不能只使用 .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);
. . .
}
最佳答案
我想你问的是 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;
}
关于c# - 将二进制数据直接写入结构的 C#/.net 等效项是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4205301/