将结构体写入文件
Write struct to file
当我写一个结构文件时,内存如何在文件中设置?例如这个结构体和函数:
struct vector3D
{
public:
float x, y, z;
vector3D(float modelX, float modelY, float modelZ)
{
x = modelX;
y = modelY;
z = modelZ;
}
vector3D()
{
x = 0;
y = 0;
z = 0;
}
}
inline void writeVector3D(vector3D vec, FILE *f)
{
fwrite((void*)(&vec), sizeof(vector3D), 1, f);
}
main中的代码:
vector3D vec(1, 2, 3);
writeVector3D(vec, file);
信息如何在文件中设置?它像123
吗?或者结构有不同的设置?
你可能需要阅读:
- 数据结构对齐(http://en.wikipedia.org/wiki/Data_structure_alignment) -关于如何在内存中安排结构成员的信息
- Endianness (Endianness) -关于单个变量如何在内存中排列的信息
- 内存中的浮点表示(不能添加第三个链接)-因为浮点变量比整数变量更"奇怪"。
数据写入的顺序与它们在内存中的顺序相同,包括对齐间隙。
将其写入顺序二进制流。
文件的大小将是结构体的大小。
在您的示例中,它将写入总共12个字节(每个浮点数4个字节),并且它将以这种方式结构化:
- 前4个字节表示浮点数1
- 第二个4字节表示浮点数2
- 第三个4字节表示浮点数3
您需要使用预处理器#pragma pack(1)来对结构进行字节对齐,否则根据处理器架构(32位或64位)进行对齐。同时检查#pragma pack效果
相关文章:
- 在没有序列化库的情况下,在 c++ 中从结构体读取和写入文件的最简单方法是什么?
- 在C++文件中写入和读取结构体的三维矢量
- 定义要在包含的头文件中访问的结构体的正确方法
- 在c++头文件中声明结构体
- 是否可以在一个.h文件中放置更多的类,或者在一个.h文件中放置更多的结构体?
- 如何将文件的行读入结构体数组
- 如何在单独的头文件中定义结构体中的char*数组?
- 结构体的重新定义错误.头文件的问题
- 从映射文件中读取带有vector的结构体
- 如何编组C头文件中由宏定义的结构体
- 从文本文件中读取数据到结构体中,然后输出数据
- 将结构体写入文件
- 如何在c++中写一个结构体到文件并读取文件
- 头文件中基于DirectX的结构体
- 从二进制文件中提取结构体成员
- 编写一个二进制文件到c#结构体
- 将文件内容添加到结构体中
- 在CPP文件中实现并在另一个类中使用的c++结构体
- 用c++向文件中写入不同的结构体
- 将文件读入结构体时大小增加10倍