【发布时间】:2016-09-19 07:24:08
【问题描述】:
我正在尝试使用结构定义访问二进制文件中的某些数据成员。
在 thi 文件中,它应该包含一个名为 fxID 的结构成员。在下面的代码中,我试图访问 fxID,但它不起作用,它返回的数字不正确。更奇怪的是,如果我将 fxID 更改为 fxVersion,我会得到相同的数字,因此 printf 似乎根本没有获取正确的数据。
FILE *p;
struct myStruct x;
p=fopen("myfile.fxb","rb");
size_t n = fread(&x, sizeof(x), 1, p);
if (n != 1) {
// Some error message
//printf("%i", sizeof(x));
} else {
printf("\n\nID:%d\n", x.fxID);
}
知道为什么我不能访问 fxID 中的数据吗?根据我在 printf 语句中使用的类型,我得到了奇怪的结果。例如,如果我使用 printf("%d", x.fxID); ,我会得到数字 1606416148;但是,这是错误的,因为我相信 fxID 是 1447514692。这是因为字节序吗?我知道这个文件是大端的,它提到了需要在我链接到的头文件中转换它。
可能是因为使用了 Int 吗?或者是错误的类型?
【问题讨论】:
-
我觉得我有似曾相识的感觉 - stackoverflow.com/questions/39556266/…
-
可能需要在文件开头添加一个关于版本的标记,即
VST_2_4_EXTENSIONS -
是的,我忘了在我自己的结构定义中添加它,我正在删除 if 语句,并且我仍在试图理解为什么我无法以有意义的方式访问结构内的数据。我遇到的问题仍然没有找到解决方案。
-
您需要有一个版本标记,然后在写入时序列化数据(也许将内容按网络顺序排列)并在读取时反序列化
-
嗨,Ed,我不写这个数据,现在只读。阅读时如何反序列化??