![](/img/trans.png)
[英]Boost Serialization Binary Archive giving incorrect output
[英]How to use boost serialization for binary output?
函數boost :: serialization :: binary_object(void * t,size_t size)和boost :: serialization :: make_binary_object(void * t,size_t size)之間的區別是什么?
我如何使用它們來獲取實際的輸出二進制文件?
歡迎來到!!
這是顯示如何使用它的示例。
#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源代碼注釋中
make_binary_object()只是一個小幫手,用於支持所有序列化包裝程序都遵循命名約定make_xxxxx的約定
boost::serialization::make_binary_object(void * t, size_t size)
是一個助手,並調用boost::serialization::binary_object(void * t, size_t size)
。 提供了幫助程序以保留命名約定make_xxxxx
要將對象保存到二進制文件,您需要創建一個Archive並調用binary_object
void save(Archive & ar, const unsigned int /* file_version */)
方法
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.