【问题标题】:Write struct to file将结构写入文件
【发布时间】:2014-06-25 18:08:35
【问题描述】:

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

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吗? 或者结构有不同的设置?

【问题讨论】:

  • 这会写出二进制表示。进行二进制输出的一个缺点是您如何处理对数据结构的更改(与读取/写入文本相比,例如 XML 或 JSON)。

标签: c++ file memory struct


【解决方案1】:

您可能需要阅读:

数据将按照它们在内存中的顺序写入,包括对齐间隙。

【讨论】:

    【解决方案2】:

    它把它写成一个顺序的二进制流。

    文件的大小将是结构的大小。

    在你的例子中,它总共会写入 12 个字节(每个浮点 4 个字节),它的结构是这样的:

    • 前 4 个字节表示浮点数 1
    • 后 4 个字节代表浮点数 2
    • 第三个 4 字节代表浮点数 3

    【讨论】:

      【解决方案3】:

      您需要使用预处理器#pragma pack(1) 对结构进行字节对齐,否则它的对齐取决于处理器架构(32 位或 64 位)。还要检查这个#pragma pack effect

      【讨论】:

        猜你喜欢
        • 2021-10-23
        • 2016-01-26
        • 1970-01-01
        • 2013-11-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-09-04
        • 1970-01-01
        相关资源
        最近更新 更多