protobuf 中的嵌套消息的使用

https://www.cnblogs.com/chris-cp/p/3700973.html

测试

syntax = "proto2";
package cpk;
enum MSG
{
    login_req = 1;
    login_res = 2;
}

message Login{
    required int32 id = 1;
}
message Message{
    required MSG msgid = 1;
    optional Login login = 2;
}
//protoc -I=./ --cpp_out=./ ./t.proto 

#include "t.pb.h"

#include 
#include 

#include 
#include 
#include 
using namespace std;

/*
//C数组的序列化和序列化API
//在/usr/local/include/google/目录下,查找包含"SerializeToArray"所有的文件,同时打印所在行
//sudo grep "SerializeToArray" -r /usr/local/include/google/ -n

bool SerializeToArray(void* data, int size) const; //序列化
bool ParseFromArray(const void* data, int size);   //反序列化

*/
char buf[1024];
size_t len;

void set_person()
{
    cpk::Message obj;

    obj.set_msgid(cpk::MSG::login_req);

    cpk::Login *lobj =new cpk::Login; //obj.mutable_l(); //
    lobj->set_id(123);

    //1
    obj.set_allocated_login(lobj);

    len = obj.ByteSizeLong();
    printf("len=%ld\n",len);

    obj.SerializeToArray(buf, len);//序列化,obj成员保存在buf中
}

void get_person()
{
    
    cpk::Message obj;
    obj.ParseFromArray(buf, len); //反序列化,buf的内容设置给obj的成员
    

    cout<<obj.msgid()<<" "<<obj.login().id()<<endl;
}

int main()
{

    set_person(); //序列化
    get_person(); //反序列化

    return 0;
}
/*
g++ test.cpp t.pb.cc -I/usr/local/include/google/protobuf -L/usr/local/lib -lprotobuf

*/

你可能感兴趣的:(protobuf 中的嵌套消息的使用)