如何使用boost序列化进行二进制输出?
Posted
技术标签:
【中文标题】如何使用boost序列化进行二进制输出?【英文标题】:How to use boost serialization for binary output? 【发布时间】: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) 有什么区别?
如何使用它们来获取实际的输出二进制文件?
【问题讨论】:
【参考方案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 & ar, const unsigned int /* file_version */)
方法
【讨论】:
以上是关于如何使用boost序列化进行二进制输出?的主要内容,如果未能解决你的问题,请参考以下文章