【发布时间】:2014-08-01 10:16:23
【问题描述】:
我正在使用 C# 开发一个项目。我想读取一个长度为 64k 的二进制文件,它是 16 字节的倍数。每 16 个字节是一个事件,其形式如下:
#pragma noalign(trace_record)
typedef struct trace_record
{
BYTE char tr_id[2]; // 2 bytes
WORD tr_task; //2 bytes
WORD tr_process; //2 bytes
WORD tr_varies; //2 bytes
KN_TIME_STRUCT tr_time; //8 bytes
} TRACE_RECORD;
我猜使用 Binaryreader 类我可以读取文件,但如何以这种形式读取 16 字节的倍数。稍后我将提取一些 16 字节的痕迹以进行进一步处理。所以我会感谢任何帮助。请假设我是 C# 的初学者 :)
【问题讨论】:
-
如果文件是little endian,你可以使用
BinaryReader.ReadUInt16等来读取各个字段。不要试图在单个内存副本中读取整条记录。 -
我认为读取/正确读取此类数据的最佳方法是将其序列化到文件中
-
创建一个内存映射文件,然后不安全地强制转换为结构指针。与 C 中的 fread 相同。