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;
    }
  • 相关阅读:
    UVA 10600 ACM Contest and Blackout(次小生成树)
    UVA 10369
    UVA Live 6437 Power Plant 最小生成树
    UVA 1151 Buy or Build MST(最小生成树)
    UVA 1395 Slim Span 最小生成树
    POJ 1679 The Unique MST 次小生成树
    POJ 1789 Truck History 最小生成树
    POJ 1258 Agri-Net 最小生成树
    ubuntu 用法
    ubuntu 搭建ftp服务器,可以通过浏览器访问,filezilla上传文件等功能
  • 原文地址:https://www.cnblogs.com/zzyoucan/p/3972025.html
Copyright © 2011-2022 走看看