将struct写入文件

时间:2014-06-25 18:08:35

标签: c++ file memory struct

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

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);
}

这段代码主要是:

vector3D vec(1, 2, 3);
writeVector3D(vec, file);

信息如何在文件中设置?是123吗? 或者struct有不同的设置?

3 个答案:

答案 0 :(得分:2)

您可能需要阅读:

  • 数据结构对齐(http://en.wikipedia.org/wiki/Data_structure_alignment) - 有关结构成员如何在内存中排列的信息
  • Endianness(Endianness) - 有关单个变量如何在内存中排列的信息
  • 内存中的浮点表示(无法添加第三个链接) - 因为浮点变量更加奇怪'比整数的。

数据的写入顺序与放入内存的顺序相同,包括对齐间隙。

答案 1 :(得分:1)

它将其写为顺序二进制流。

文件的大小结构的大小

在你的情况下,它会写入总共12个字节(每个浮点数4个字节),它将以这种方式构建:

  • 前4个字节代表float 1
  • 第二个4个字节代表浮动2
  • 第三个4个字节代表浮动3

答案 2 :(得分:0)

您需要预处理器#pragma pack(1)对字节进行字节对齐,否则根据处理器体系结构(32位或64位)进行对齐。另请查看此#pragma pack effect