zoukankan      html  css  js  c++  java
  • c++中编码protobuf repeated string

    参考:http://www.cppblog.com/API/archive/2014/12/09/209070.aspx

    proto文件

    addressbook.proto

    syntax = "proto3";
    package lm; 
    message group_s 
    { 
       string             group_name = 1;
       repeated string    member_name = 2;
    }
    

    C++程序

    • 编码proto文件
      probufwriter.cpp
    #include "addressbook.pb.h"
    #include <fstream>
    #include <iostream>
    using namespace std;
    
    int main(void) 
    { 
        lm::group_s msg1; 
        msg1.set_group_name("Class-1"); 
        for(int j =0; j<3; j++){ 
            std::string m_name = "student_"+to_string(j);
            msg1.add_member_name(m_name);
            cout << msg1.member_name(j) << endl;               //打印出string数组元素
        }
        // Write the new address book back to disk. 
        fstream output("./log", ios::out | ios::trunc | ios::binary); 
                
        if (!msg1.SerializeToOstream(&output)) { 
            cerr << "Failed to write msg." << endl; 
            return -1; 
        }         
        return 0; 
    }
    
    • 解码proto文件
      probufread.cpp
    #include "addressbook.pb.h"
    #include <iostream>
    #include <fstream>
    using namespace std;
    
    
    void ListMsg(const lm::group_s & msg) { 
        for(int j =0; j<3; j++){ 
            cout << msg.member_name(j) << endl; 
        }
        cout << msg.group_name() << endl; 
    } 
      
    int main(int argc, char* argv[])
    { 
     
        lm::group_s msg1; 
    
        { 
            fstream input("./log", ios::in | ios::binary); 
            if (!msg1.ParseFromIstream(&input)) { 
            cerr << "Failed to parse address book." << endl; 
            return -1; 
            } 
        } 
    
        ListMsg(msg1); 
    
    }
    

    编译运行

    编译环境

    安装好protobuf库
    安装方法:https://www.cnblogs.com/abc36725612/p/14196674.html

    编译

    参考:https://www.cnblogs.com/huanyinglvtuan/p/14119328.html

    • 生成c++结构体
    # protoc -I=. --cpp_out=. ./addressbook.proto
    # ls
    README.md  addressbook.pb.cc  addressbook.pb.h  addressbook.proto  probufread.cpp  probufwriter.cpp
    

    编译c++程序

    # g++ -std=c++11 -g -Wall addressbook.pb.cc probufwriter.cpp -o s -lprotobuf -I /include -lpthread
    # g++ -std=c++11 -g -Wall addressbook.pb.cc probufread.cpp -o c -lprotobuf -I /include -lpthread
    运行
    # ./s
    student_0
    student_1
    student_2
    # ./c
    student_0
    student_1
    student_2
    Class-1
    
  • 相关阅读:
    函数式编程
    _.pick lodash
    Vue mixins extend
    js 导入json配置文件
    FormData
    shell中的调试与计算
    linux命令(6/10):find 命令
    Linux性能测试分析命令_sar+iostat+vmstat+top
    linux命令详解之(at)
    linux命令(6/9):watch命令
  • 原文地址:https://www.cnblogs.com/abc36725612/p/14191675.html
Copyright © 2011-2022 走看看