boost序列化
#include <iostream>
#include <boost/serialization/serialization.hpp>
#include <boost/archive/binary_iarchive.hpp>
#include <boost/archive/binary_oarchive.hpp>
#include <boost/archive/text_iarchive.hpp>
#include <boost/archive/text_oarchive.hpp>
#include <sstream>
#pragma warning (disable: 4244) //解决boost 中binary序列化:“std::streamsize”转换到“size_t”
using namespace std;
//这里的输入输出,从stringstream到ia或者oa
//序列化,文本模式可以用char*然后分配内存,个人认为是流的方式string中是没有/0的然后strcpy(*json, ss.str().c_str());就会出错,下面的解析就有问题
//void packetage(char** json, int& len)//不能直接用char* json,因为传递的指针的值会变,需要传递指针的地址
//{
// std::stringstream ss;
// //binary_oarchive表示输出到ss中,这也是用stringstream作为中介的,估计也是用stringstream作为存储的,从oa输出到ss中
// boost::archive::text_oarchive oa(ss);
// int a = 1;
// int b = 2;
// oa << a << b;
// *json = new char[ss.str().size() + 1];
// strcpy(*json, ss.str().c_str());
// len = ss.str().size();
//}
//对于流的方式只能只能传递一个string,然后json = ss.str();
void packetage(std::string& json, int& len)//不能直接用char* json,因为传递的指针的值会变,需要传递指针的地址
{
std::stringstream ss;
//binary_oarchive表示输出到ss中,这也是用stringstream作为中介的,估计也是用stringstream作为存储的,从oa输出到ss中
boost::archive::binary_oarchive oa(ss);
int a = ;
int b = ;
oa << a << b;
json = ss.str();
//strcpy(*json, ss.str().c_str());//个人感觉这里数据就出错了
len = ss.str().size();
} //void parse(char* json, int len)
//{
// //由于这个是流的方式而不是文本的方式,所以需要长度
// //std::stringstream ss(json);//这种方式不行,因为是流,对于文本模式可以
// std::stringstream ss(json);
// //ss.write(json, len);//需要根据长度手动写入到ss中
// boost::archive::text_iarchive ia(ss);//这个是表示输入,只是从stringstream输入到ia中
// int a;
// int b;
// ia >> a >> b;
//} void parse(const char* json, int len)
{
//由于这个是流的方式而不是文本的方式,所以需要长度
//std::stringstream ss(json);//这种方式不行,因为是流,对于文本模式可以
std::stringstream ss;
ss.write(json, len);//需要根据长度手动写入到ss中
boost::archive::binary_iarchive ia(ss);//这个是表示输入,只是从stringstream输入到ia中
int a;
int b;
ia >> a >> b;
} int main()
{
//char* json = NULL;
std::string json;
int len = ;
packetage(json, len);
parse(json.c_str(), len);//c_str()返回首字符的地址
getchar();
return ;
}
boost序列化的更多相关文章
- Boost 序列化
原文链接: https://blog.csdn.net/qq2399431200/article/details/45621921 1. 编译器 gcc, boost 1.55 2.1第一个简单的例子 ...
- linux下Boost序列化问题解决
由于项目需要,要使用boost,所以在网上找了一些例子帮助理解,其中遇到很多问题,再次总结记录一下.#include <boost/archive/text_oarchive.hpp> # ...
- 最经常使用的两种C++序列化方案的使用心得(protobuf和boost serialization)
导读 1. 什么是序列化? 2. 为什么要序列化?优点在哪里? 3. C++对象序列化的四种方法 4. 最经常使用的两种序列化方案使用心得 正文 1. 什么是序列化? 程序猿在编写应用程序的时候往往须 ...
- boost serialize序列化
boost序列化 #ifndef FND_SERI_H #define FND_SERI_H #include <boost/archive/text_oarchive.hpp> #inc ...
- 最常用的两种C++序列化方案的使用心得(protobuf和boost serialization)
导读 1. 什么是序列化? 2. 为什么要序列化?好处在哪里? 3. C++对象序列化的四种方法 4. 最常用的两种序列化方案使用心得 正文 1. 什么是序列化? 程序员在编写应用程序的时候往往需要将 ...
- c++序列化方法
暂时使用boost 序列化, 目前我的测试基本都ok 只是对于c++11 shared ptr 没有测试成功,只能手工写下shared ptr 部分的序列化,也就是目前我对指针都不直接序列化,自己管理 ...
- 二进制序列化框架easypack发布啦!
简介 easypack是基于boost.serialization的二进制序列化框架,使用极其方便. Examples 基本类型 int age = 20; std::string name = &q ...
- C++ | boost库 类的序列化
是的,这是今年的情人节,一篇还在研究怎么用的文章,文结的时候应该就用成功了. 恩,要有信心 神奇的分割线 不知何时装过boost库的header-only库, 所以ratslam中的boost是可以编 ...
- 如何用boost::serialization去序列化派生模板类(续)
在 如何用boost::serialization去序列化派生模板类这篇文章中,介绍了序列化派生类模板类, 在写測试用例时一直出现编译错误,调了非常久也没跳出来,今天偶然试了一下...竟然调了出来. ...
随机推荐
- 【学习笔记】【C语言】自增自减
1. 简单使用 ++ 自增运算符.如a++,++a,都等价于a = a+1 --自减运算符.如a--,--a,都等价于a = a-1 5++是错误的,因为5是常量 2. ++a和a++的区别 int ...
- MVC5 属性路由
属性路由(attribute routing)是最新被引进到MVC5中的,它和传统路由共同组成了mvc5中的两种主要路由. 1. 高质量的url应该满足以下几点 域名便于记忆和拼写 简短 便于输入 可 ...
- 10款免费CSS编辑器应对于Linux和Ubuntu
您是否在使用Linux和Ubuntu的,不知道在哪里可以找到一些优秀且免费的CSS编辑器用于Linux和Ubuntu的?如果你的答案是肯定的,然后停止幻想,开始浏览这个帖子里,我们展示了前10名,并免 ...
- setbuf
setbuf是linux中的C函数,主要用于打开和关闭缓冲机制. setbuf函数具有打开和关闭缓冲机制.为了带缓冲进行I/O,参数buf必须指向一个长度为BUFSIZ(定义在stdio.h头文件中) ...
- C# http下载(支持断点续传)
分享下项目里面自己封装的一个http下载类 功能如下: 1.支持断点续传 2.下载失败自动重试 3.超时等异常处理 using System; using System.Collections.Gen ...
- Android AdapterView.OnItemSelectedListener
AdapterView.OnItemSelectedListener Summary Public Methods abstract void onItemSelected(AdapterView&l ...
- Web应用登出后防止浏览器后退
通常情况下,浏览器会对页面进行缓存,此时可以通过后退访问刚才的页面,如:Web应用登出后后退能够访问刚才被缓存的页面,这样在有些情况下是不够安全的,解决防止后退的办法如下: response.setH ...
- PHP连接SQL Server(sqlsrv)
配置好php环境后,下载如下依赖包,解压目录选择php的ext目录,并在php.ini中加上(我的php版本为5.6) extension=php_pdo_sqlsrv_56_ts.dll exten ...
- .Net中的Socket通讯
.NetFrameWork为Socket通讯提供了System.Net.Socket命名空间,在这个命名空间里面有以下几个常用的重要类分别是: ·Socket类 这个低层的类用于管理连接,WebReq ...
- vmware虚拟机上网:NAT搭建局域网
若是你不知道的情况下,可以编辑虚拟机网络配置,然后恢复默认,vmware会自动给你分配好ip,默认使用的是vmware8,下面的是使用默认的配置 看图 注意:子网的ip一定要在如上图所示的范围 适配器 ...