从二进制文件读/写包含数组的结构体
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
参数。
【讨论】:
啊,是的,我的文件处理在关闭和打开时是正确的。我正在阅读指针的大小,这就是问题所在。谢谢!以上是关于从二进制文件读/写包含数组的结构体的主要内容,如果未能解决你的问题,请参考以下文章
Pentaho Kettle - 从二进制类型的字段将十六进制转换为数字