从二进制文件读/写包含数组的结构体

Posted

技术标签:

【中文标题】从二进制文件读/写包含数组的结构体【英文标题】:Read/Write Struct Containing Arrays to/from Binary File 【发布时间】:2013-10-17 15:48:30 【问题描述】:

我有一个结构:

typedef struct codeKey_s 
    unsigned char shortest;
    unsigned char longest;
    unsigned char lengths[256];
    int table[256];
 codeKey_t;

如您所见,我有静态大小的值类型数组。我的问题是当我保存,然后从二进制文件中读取它们时,两个数组都是空的。我看到其他人使用 char* 字符串进行这项工作,那是什么?

这是我的写/读语句:

fwrite(codeKey, sizeof (codeKey_t), 1, file);

codeKey_t* retCodeKey = (codeKey_t*)malloc(sizeof(codeKey_t));
fread(retCodeKey, sizeof(codeKey_t*), 1, readFile);

【问题讨论】:

【参考方案1】:

来自 TFM

On success, fread() and fwrite() return the number of items read or written.

您只尝试一次 fread 和 fwrite;不能保证他们在一次通话中完成。

另一个问题是时间 - 您是否在 fwrite 后不久打开并 fread 文件,也许在关闭写入文件句柄之前?如果是这样,您可能需要在读取之前刷新写入文件句柄。

更新 你叫 fread 错了

fread(retCodeKey, sizeof(codeKey_t*), 1, readFile);

将指针类型的大小传递给size 参数。

【讨论】:

啊,是的,我的文件处理在关闭和打开时是正确的。我正在阅读指针的大小,这就是问题所在。谢谢!

以上是关于从二进制文件读/写包含数组的结构体的主要内容,如果未能解决你的问题,请参考以下文章

从二进制文件创建 Numpy 数组的有效方法

尝试从二进制文件读取时引发违规

Protobuf Net 和从二进制文件存储/检索数据块

Pentaho Kettle - 从二进制类型的字段将十六进制转换为数字

无法使用 fstream 从二进制文件中读取字符串,而是显示奇怪的符号

用c或c++实现结构体的序列化和反序列化