我知道以下方法可能无法移植,但这正是我现在想要找到的。 想象一下,我有一些数据结构
struct student
{
char name[20];
int age;
} x;
现在我想把它写成这样的文件:
fwrite(&x, sizeof(student), 1, filePointer);
同样阅读:
fread(voidPointer, sizeof(student), 1, filePointer);
// Now possibly do a memcpy
memcpy(studentObjectPointer, voidPointer, sizeof(student));
我的问题是:说我不想将此文件复制到另一台计算机,我将从创建此文件的同一台计算机上读取它。 可移植性(字节顺序,打包数据结构)问题是否仍适用于上述方法?或者它会正常工作?
答案 0 :(得分:1)
如果文件将被复制到其他计算机上,则必须构建自己的序列化程序和解串器。你给它的结构非常简单。
您必须定义在编写数字时采用哪种字节顺序(此处为int age
)。
在这里,你可以像这样处理:
name
字符串age
写入 CHOSEN 字节序(big endian)在阅读它时,您肯定必须将Big-Endianness转换为机器的本地字节顺序。
还有一个问题:如果两台机器之间的sizeof (int)
不一样。在这种情况下,事情变得更加恶毒,我认为上述情况还不够。
如果您确实需要在各种计算机上移植,请考虑使用#include <stdint.h>
中定义的特定长度类型,例如int32_t
。
答案 1 :(得分:0)
请记住,我们生活在一个四维世界中。你说,保存的文件不会在x,y和z轴上移动,它将在同一台计算机上使用。但你没有提到第四个维度,时间。如果结构发生变化,它将失败。
至少,您应该在结构中放置一个签名字段。在write()之前用常量值填充它,在read()之后立即检查它,并在修改结构时更改常量值。