zoukankan      html  css  js  c++  java
  • 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 = 1;
        int b = 2;
        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 = 0;
        packetage(json, len);
        parse(json.c_str(), len);//c_str()返回首字符的地址
        getchar();
        return 0;
    }
  • 相关阅读:
    点击其他地方隐藏div
    jquery获得被选中radio的值
    c++几个新特性
    effective c++ (三)
    80X86保护模式及其编程(一)
    Linux内核完全注释之编程语言和环境(二)
    Linux内核完全注释之编程语言和环境(一)
    linux内核完全注释之微型计算机组成结构
    effective c++ (二)
    effective c++ (一)
  • 原文地址:https://www.cnblogs.com/zzyoucan/p/3972025.html
Copyright © 2011-2022 走看看