二进制序列化使用Boost和uint8_t
Binary Serialization Using Boost and uint8_t
处理二进制数据时,我倾向于使用uint8_t
。对我来说,这就是字节的类型。但是,我不知道如何使boost中的二进制序列化与该类型一起工作。我的要求是不可能的还是漏掉了一些简单的东西?
这个示例程序不能在VS2013上编译,因为有些人抱怨不能将流转换为std::ostream
或std::istream
。
程序工作良好与char
而不是uint8_t
,但这让我。:)
#include <cstdlib> // EXIT_SUCCESS
#include <vector>
#include "boost/archive/binary_iarchive.hpp"
#include "boost/archive/binary_oarchive.hpp"
#include "boost/iostreams/device/array.hpp"
#include "boost/iostreams/device/back_inserter.hpp"
#include "boost/iostreams/stream_buffer.hpp"
int main(int argc, char** argv)
{
typedef std::vector< uint8_t > Buffer;
Buffer buffer;
// Serialization
{
int foo = 1;
typedef boost::iostreams::back_insert_device< Buffer > Device;
Device device(buffer);
typedef boost::iostreams::stream_buffer< Device > Stream;
Stream stream(device);
{
boost::archive::binary_oarchive archive(stream);
archive << foo;
}
}
// Deserialization
{
int foo;
typedef boost::iostreams::basic_array_source< uint8_t > Device;
Device device(buffer.data(), buffer.size());
typedef boost::iostreams::stream_buffer< Device > Stream;
Stream stream(device);
{
boost::archive::binary_iarchive archive(stream);
archive >> foo;
}
}
return EXIT_SUCCESS;
}
二进制存档采用std::istream
/std::ostream
参数,因此您只能使用std::basic_istream<char>
/std::basic_ostream<char>
。
顺便说一下,不能保证实现提供unsigned char
/uint8_t
版本的流(或者更确切地说是std::char_traits<unsigned char>
)。
相关文章:
- 理解boost::asio-async_read在无需读取内容时的行为
- boost::进程间消息队列引发错误
- 如何运行位于boost/libs/python/example/tutorial目录中的hello.cpp和Jamfil
- cmake如何在fedora工作站中找到boost静态库包
- CMake项目Boost库错误:Boost/config/compiler/gcc.hpp:165:10:致命错误:cs
- Boost Graph Library,修复节点大小
- 什么是"#include <boost/functional/hash.hpp> "?
- 基于boost的程序的静态链接——zlib问题
- C++:如何在CLion IDE中安装Boost
- C++Boost Asio Pool线程,带有lambda函数和传递引用变量
- 如何在boost beast http请求中设置http头
- Boost Spirit,获取迭代器内部语义动作
- boost::asio::steady_timer()与sleep()我应该使用哪一个
- boost::asio如何生成多个协同程序,然后加入它们
- 当我尝试使用 sstream 和分面将 Boost Time_duration转换为字符串时,我没有得到所需的格式
- Visual Studio(或任何其他工具)能否将地址解释为调用堆栈(boost上下文)的开头
- 从值小于256的uint16到uint8的Endian安全转换
- 如何使用boost::具有嵌套结构和最小代码更改的序列化
- 使用Boost Interprocess创建托管共享内存需要很长时间
- Boost::posix_time::ptime舍入到给定的分钟数