我无法使用c ++以二进制模式保存数据

时间:2018-04-10 12:24:35

标签: c++ binaryfiles

我想写一个二进制文件,但是当我打开它时,我可以阅读那里有什么。这很自然吗?我知道二进制文件只能由计算机解释。我很困惑,请帮忙。 这是我的代码:

Product p;
create(p);
        std::ofstream myfile("example.bin",std::ios::out | std::ios::binary);
        myfile << p;
        myfile.close();

friend std::istream& operator >> (std::istream &is, Product& prod);
    friend std::ostream& operator <<(std::ostream &os, const Product& prod);

2 个答案:

答案 0 :(得分:3)

您不应将<<运算符与二进制文件一起使用,它应与文本文件一起使用。

您应该使用ostream的write(...)方法。

在你的情况下:

Product p;
create(p);
std::ofstream myfile("example.bin", std::ios::out | std::ios::binary);
myfile.write(&p, sizeof(p));
myfile.close();

答案 1 :(得分:0)

要写入二进制文件,需要使用write,

写(const char * s,streamsize n);

使用reinterprete_cast作为指针,并将对象的大小传递给它。

如果是pod(使用std :: is_pod_v&lt;&gt;进行测试),则可以使用

myfile.write(reinterpret_cas<const char *>(&p), sizeof(p))

否则,您必须使用序列化程序(如boost serializer

)序列化您的对象