300字范文,内容丰富有趣,生活中的好帮手!
300字范文 > c++ protobuf中repeated类型使用——序列化

c++ protobuf中repeated类型使用——序列化

时间:2019-02-10 19:38:37

相关推荐

c++ protobuf中repeated类型使用——序列化

Protobuf中的repeated V、map<K,V>序列化使用。

一、简单类型repeated

//定义messagemessage M_TEST{repeated double dparams=1;//double参数集repeated int32iparams=2;//int参数集string desc=99;//描述}

简单类型repeated,可以通过add_<参数名>(参数值)的方式设置值,再进行序列化;

M_TEST testpacket;testpacket.set_desc("Demo");int i = 0;do{double di = i + 0.001;testpacket.add_iparams(i);testpacket.add_dparams(di);i++;} while (testpacket.ByteSize() < 1024);//填充测试数据//序列化string strpb;testpacket.SerializeToString(&strpb);

二、对象类型repeated

//定义协议1message M_Person{stringname = 1; //姓名int32age= 2; //年龄}//定义协议2message M_Team{repeated M_Person member= 1; //成员信息stringdesc = 99; //描述}

对象类型repeated,可以通过add_参数名()的方式设置值,再进行序列化;

M_Team teampacket;M_Person *person;teampacket.set_desc("Demo");person = teampacket.add_member();person->set_name("张三");person->set_age(33);string strpb;teampacket.SerializeToString(&strpb);

三、多层嵌套与map<K,V>使用示例

1)协议主体示例如下:

//围棋竞赛详情message M_Battle{repeated M_GroupInfo junior = 1; //初中队repeated M_GroupInfo senior = 2; //高中队map<string,M_GroupInfo> teacher = 3; //教师队string desc= 99; //描述}//队伍成员信息message M_GroupInfo{string nickname = 1; //昵称E_Gendergender= 2; //性别M_Projectproject= 3; //参赛项目string desc = 99; //描述}//竞赛项目信息message M_Project{int32 id= 1; //项目IDstring name = 2; //项目名称string desc = 99; //项目描述}//性别enum E_Gender{GENDER_UNKNOWN = 0; //未知GENDER_MALE= 1; //男性GENDER_FEMALE = 2; //女性}

2)map与repeated使用示例如下:

M_Battle battlepacket;//M_Battle变量teacher:处理map类型auto* wMap = battlepacket.mutable_teacher();for (int i = 1; i <= 3; i++){M_GroupInfo group_teacher;//M_GroupInfo变量nicknamegroup_teacher.set_nickname("fuzi" + to_string(i));//M_GroupInfo变量gendergroup_teacher.set_gender(GENDER_UNKNOWN);//M_GroupInfo变量projectM_Project *project_teacher = new M_Project();project_teacher->set_id(i);project_teacher->set_name("teacher project" + to_string(i));project_teacher->set_desc("This is teacher project " + to_string(i));group_teacher.set_allocated_project(project_teacher);//M_GroupInfo变量descgroup_teacher.set_desc("This is group_teacher member " + to_string(i));//添加到map键值string key = "teacher" + to_string(i);(*wMap)[key] = group_teacher;}//M_Battle变量desc:基础类型battlepacket.set_desc("Demo");//M_Battle变量junior, seniorint i = 1;do{M_GroupInfo* group_junior;M_GroupInfo* group_senior;M_Project *project_junior = new M_Project();M_Project *project_senior = new M_Project();project_junior->set_id(i);project_junior->set_name("junior project " + to_string(i));project_junior->set_desc("This is junior project " + to_string(i));project_senior->set_id(i*2);project_senior->set_name("senior project " + to_string(i));project_senior->set_desc("This is senior project " + to_string(i));group_junior = battlepacket.add_junior();group_junior->set_nickname("zhangsan" + to_string(i));group_junior->set_gender(GENDER_MALE);group_junior->set_allocated_project(project_junior);group_junior->set_desc("This is group_junior member " + to_string(i));group_senior = battlepacket.add_senior();group_senior->set_nickname("lisi" + to_string(i));group_senior->set_gender(GENDER_FEMALE);group_senior->set_allocated_project(project_senior);group_senior->set_desc("This is group_senior member " + to_string(i));i++;} while (battlepacket.ByteSize() < 1024);//填充数据//序列化int size = battlepacket.ByteSize();void *p = malloc(size);battlepacket.SerializeToArray(p, size);//或序列化//string strpb;//battlepacket.SerializeToString(&strpb);

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。