c# - 将二进制数据直接写入结构的 C#/.net 等效项是什么?

标签 c# .net c

结构的确切结构并不重要。

从我收集到的以下 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);
. . .
}

最佳答案

我想你问的是 StructLayoutAttributeFieldOffsetAttribute .

来自 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/

相关文章:

c++ - 如何将结果存储到文本文件中?

c - fgets 不读 EOL?

c# - 构造函数和字段初始化执行顺序

c# - 如何筛选使用 Microsoft Graph 查询的 Sharepoint 列表项

c# - 使用 C# 删除换行符

c# - 如何使用 PowerShell 将项目添加到 System.Collections.Generic.List 对象?

c# - 可见性取决于通用数据类型

c - 为什么在使用 extern 时可以使用错误的签名调用我的函数?

c# - 输入验证错误类未添加到自定义 HtmlHelper 扩展方法中

c# - 在 Windows 7 64 位上使用 VS 2008 访问 COM DLL