【问题标题】:How to use boost serialization for binary output?如何使用boost序列化进行二进制输出?
【发布时间】:2019-01-30 08:57:19
【问题描述】:

函数 boost::serialization::binary_object(void * t, size_t size) 和 boost::serialization::make_binary_object(void * t, size_t size) 有什么区别?

如何使用它们来获取实际的输出二进制文件?

【问题讨论】:

    标签: c++ boost


    【解决方案1】:

    欢迎来到 SO!!

    这是一个展示如何使用它的示例。

    #include <boost/archive/binary_oarchive.hpp>
    #include <boost/archive/binary_iarchive.hpp>
    #include <boost/serialization/binary_object.hpp>
    #include <boost/serialization/serialization.hpp>
    #include <iostream>
    #include <sstream>
    
    using boost::serialization::make_binary_object;
    
    enum class Example : uint8_t {
        A = 1,
        B = 2,
    };
    
    int main() {
    
        std::stringstream stream;
        boost::archive::binary_oarchive ar(stream, boost::archive::no_header);
    
        auto data = Example::A;
        ar << make_binary_object(&data, sizeof(data));
    
        std::cout << "Size: " << stream.str().size() << "\n";
    }
    

    如果你想将二进制对象保存在一个文件中,这里有一个例子,它将它保存在一个名为 data.dat 的文件中

    #include <fstream>
    
    using boost::serialization::make_binary_object;
    
    enum class Example : uint8_t {
        A = 1,
        B = 2,
    };
    
    int main() {
    
        std::ofstream f("data.dat", std::ofstream::binary);
        boost::archive::binary_oarchive ar(f, boost::archive::no_header);
    
        auto data = Example::A;
        ar << make_binary_object(&data, sizeof(data));  
    }
    

    运行代码后,文件如下所示

    来自@StoryTeller 发布的 boost 源代码 cmets
    make_binary_object() 只是支持所有序列化包装器遵循命名约定 make_xxxxx 的约定的一个小帮手

    【讨论】:

    • 我不明白一件事,我怎样才能得到以特定名称保存的二进制文件到文件夹中。
    • 只需使用文件流 fstream,您可以在 Internet 上找到示例。请将我的答案标记为正确.. 谢谢!
    • 我将添加一个写入文件的示例。
    【解决方案2】:

    boost::serialization::make_binary_object(void * t, size_t size) 是一个助手并调用boost::serialization::binary_object(void * t, size_t size)。提供帮助程序以保留命名约定 make_xxxxx

    要将对象保存到二进制文件,您需要创建一个存档并调用 binary_object 的 void save(Archive &amp; ar, const unsigned int /* file_version */) 方法

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-03-02
      • 2015-09-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-17
      相关资源
      最近更新 更多