将结构体写入文件

Write struct to file

本文关键字:文件 结构体      更新时间:2023-10-16

当我写一个结构文件时,内存如何在文件中设置?例如这个结构体和函数:

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效果