C++ 关于 protobuf的一些操作

2023-10-27

先是定义部分,下面跟一些例子组成:
message DBRoleData {
uint64 RoleID = 2;
string Name = 6;
repeated int64 Action= 12;//存内置重复单位
}

message DBRoleLoginAck {
DBRoleData RoleData = 3;
}

//1 一个例子
//函数里面(DBRoleLoginAck& Ack)
{
// 创建一个该对象,存入数据
DBRoleData* pData = Ack.mutable_roledata();//这个是方法
pData->set_roleid(INT64 ) ;//设置值
pData->set_name(const char*);
pData->add_action( INT64 );
pData->add_action( INT64 );
}

//2个例子 :存自定义重复单位

message RoleItem {
uint64 RoleID = 1;
}

message RoleListAck {
repeated RoleItem RoleList = 3;
}

函数//(RoleListAck& Ack)
RoleItem* pNode = Ack.add_rolelist();

pNode->set_roleid(INT64) //设置数据

//3.例子 单个对象 复合对象
(DBRoleLoginAck& Ack)

message DBCopyItem {
uint64 RoleID = 1; //角色ID
}
message DBCopyData {
repeated DBCopyItem CopyList = 1; //重复对象
}

message DBRoleLoginAck {
DBCopyData CopyData = 5;//只有一个
}

DBCopyData* pData = NULL;
pData = Ack.mutable_copydata();//取该对象
DBCopyItem* pItem = pData->add_copylist(); //创建重复对象
pItem->set_roleid(INT64) //设置

//4.遍历对象
message ActionReqItem {
uint64 ObjectGuid = 1;
}
message ObjectActionReq {
repeated ActionReqItem ActionList = 1; //自定义 重复对象
}

ObjectActionReq Req; //解析结构体
Req.ParsePartialFromArray(pNetPacket->m_pDataBuffer->GetData(), pNetPacket->m_pDataBuffer->GetBodyLenth());
for(int i = 0; i < Req.actionlist_size(); i++) //遍历 重复对象
{
const ActionReqItem& Item = Req.actionlist(i); //获取该重复对象返回类型为const ::ActionReqItem&
UINT64 uID = Item.objectguid() //
}

//5.实例读取对象 主要是一些常见操作

message PhoneNumber {

PhoneType type = 2 ;

}

message Person {
string name = 1;
int32 id = 2;
repeated PhoneNumber phones = 4;
}

message AddressBook {
repeated Person people = 1;
}

//以下写测试代码
AddressBook addBook;

//加入第一个人
Person* people1 = addBook.add_people(); //增加

people1->set_name("xiao");
people1->set_id(100);

//设置第一个人的电话号码
PhoneNumber* phone1 = people1->add_phones();
phone1->set_type(MOBILE);//0

//加入第二个人
Person* people2 = addBook.add_people(); //增加

people2->set_name("long");
people2->set_id(99);

//设置第二个人的第一个电话号码
PhoneNumber* phone2 = people2->add_phones();
phone2->set_type(WORK);//2

//设置第二个人的第二个电话号码
PhoneNumber* phone3 = people2->add_phones();
phone3->set_type(HOME);//1

//加入第三个人
Person* people3 = addBook.add_people(); //增加

people3->CopyFrom(*people2);

//设置第三个人的第三个电话号码
PhoneNumber* phone4 = people3->add_phones();
phone4->CopyFrom(people3->phones(1)); //拷贝一份自己的第一个电话号码


PhoneNumber phone5;

phone5.CopyFrom(*phone2);//传入const PhoneNumber& from 返回 PhoneNumber 对象

CLog::GetInstancePtr()->LogError("phone5 type = %d", phone5.type()); //-- 2


CLog::GetInstancePtr()->LogError("gg addBook.people_size() = %d", addBook.people_size()); //-- 3

for (int i =0;i< addBook.people_size();i++)
{
	const Person& per = addBook.people(i);
	int id = per.id();

	for (int j =0;j< per.phones_size();j++)
	{
		int type = per.phones(j).type();

		CLog::GetInstancePtr()->LogError("people i= %d  =  phone4 =%d id =%d type =%d ", i,j, id, type);
	}

}
	/* 以下输出为
	people i = 0 = phone4 = 0 id = 100 type = 0
	people i = 1 = phone4 = 0 id = 99 type = 2
	people i = 1 = phone4 = 1 id = 99 type = 1
	people i = 2 = phone4 = 0 id = 99 type = 2
	people i = 2 = phone4 = 1 id = 99 type = 1
	people i = 2 = phone4 = 2 id = 99 type = 1
	*/
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C++ 关于 protobuf的一些操作 的相关文章

随机推荐

  • 快乐数

    编写一个算法来判断一个数是不是 快乐数 一个 快乐数 定义为 对于一个正整数 每一次将该数替换为它每个位置上的数字的平方和 然后重复这个过程直到这个数变为 1 也可能是无限循环但始终变不到 1 如果可以变为 1 那么这个数就是快乐数 示例
  • uni-app的生命周期

    uni app的生命周期包括应用生命周期和页面生命周期 应用生命周期涵盖了整个uni app应用的启动 运行和销毁过程 主要包括以下几个生命周期函数 onLaunch 应用初始化时触发 只触发一次 onShow 应用启动或从后台进入前台时触
  • 自动化测试 selenium 解决selenium.common.exceptions.SessionNotCreatedException: Message: session not created

    问题 selenium common exceptions SessionNotCreatedException Message session not created 原因 selenium模拟的客户端对浏览器的操作 相应浏览器的驱动版本
  • java模拟post请求发送json数据

    import com alibaba fastjson JSONObject import org apache http client methods CloseableHttpResponse import org apache htt
  • Python3中pickle模块介绍

    Pyhton3中的pickle模块用于对Python对象结构的二进制进行序列化 或pickling 和反序列化 或unpickling pickling 是将Python对象及其所拥有的层次结构转化为一个字节流 byte stream 的过
  • 首次使用计算机 鼠标没反应,鼠标没反应各种解决方法教程

    我们在使用鼠标的时候开始肯定没问题 但长期使用下来 总会出现一种故障 比如最常见的鼠标没反应的问题 也就是说不管你怎么滑动鼠标 显示器里的光标都不动了 这种问题怎么解决呢 我们要分成有线鼠标和无线鼠标两种情况 一 有线鼠标没反应 一般有线鼠
  • kalilinux搭建DCN漏洞靶场

    kalilinux系统搭建DCN漏洞靶场 前言 安装kalilinux 搭建靶场 WinSCP连接kalilinux实现文件上传 导入镜像 前言 最近想学一下WEB安全 顺便学习一下靶场环境的搭建 之前搭建过webug玩了一下 但自己电脑运
  • 编程的美学标准诌议

    编程的美学标准诌议 做了几年的程序员 虽然自己写的代码还远远没有达到要求 但在日复一日的实践过程中 我逐渐开始信奉一条标准 在实现功能的前提下 简单即是美 其实 编程的过程就好比是一个建模的过程 设计就是将一个现实问题抽象成逻辑模型 而编码
  • git命令使用上传下载详情大全...

    不罗嗦直接上内容 git branch 查看本地所有分支 git status 查看当前状态 git commit 提交 git branch a 查看所有的分支 git branch r 查看远程所有分支 git commit am in
  • CISCN(Web Ezpentest)GC、序列化、case when

    目录 REGEXP的一个点 正则 like 默认不区分大小写 当禁用了空格 regexp like的区分大小写的使用方法 CISCN 2022 初赛 ezpentest 卡点 2022 HFCTF babysql 最近又学到了一道新知识 c
  • attrs.xml中declare-styleable 详解(用于自定义控件的属性)

    1 框架定义
  • simulink电力电子仿真(3)单相桥式全控整流电路

    simulink电力电子仿真 3 单相桥式全控整流及有源逆变电路 返回目录 主要是赶上了疫情 然后期末要疯狂补实验报告 就索性写一下吧 万一以后再做电力电路仿真 可能会有用的 也希望可以帮助别人 器件的选择及位置 MATLAB的版本 201
  • 【k8s集群管理工具篇】云原生之部署K8s管理面板KubePi

    k8s集群管理工具篇 云原生之部署K8s管理面板KubePi 一 KubePi介绍 二 环境规划 三 检查本地环境 1 检查k8s集群状态 2 检查kubepi管理主机环境 三 部署KubePi 1 创建KubePi容器 2 检查KubeP
  • Flutter填坑 编译运行不起来

    记录下Flutter中遇到的一些问题 基本上按照Flutter中文网的教程可以完成Flutter环境的搭建 Flutter中文网 https flutterchina club Windows 环境 https flutterchina c
  • sqli-labs 靶场环境搭建

    目录 一 搭建环境所需资源 搭建sqli labs 靶场需要的运行环境 二 搭建过程 1 下载资源 2 创建网站 3 更改配置文件 4 安装数据库 不使用 php7 x 版本的原因 一 搭建环境所需资源 搭建sqli labs 靶场需要的运
  • 21计算机考研国家线,来了!21考研国家线公布!附详细解读!

    原标题 来了 21考研国家线公布 附详细解读 21考研人最近大概都在焦虑的等待国家线 昨天中国农业大学的一条消息直接将 考研国家线 顶上热搜 这不 最新出炉的国家线就来了 21考研国家线公布 21国家线学硕总分线上涨的门类有 经济学 历史学
  • 人工智能还是人工智障

    序言 有的时候感觉有脑子 有的时候感觉没有 到底是有还是没有呢 机器人 有的很智能 有的很智障 是智能的时候可爱 还是在智障的时候可爱 你是惧怕智障还是惧怕人工智能 风言风语 作为一个吵架之王 每次吵架的时候都会想 现在人工智能这么多 但是
  • 【支持向量机】最大间隔超平面及Matlab代码

    线性可分 在特征空间中 有两个训练样本可以通过一条直线区分开 则称为线性可分 而在特征空间大于等于四维时 分开训练样本的平面 称为超平面 我们定义一条直线方程 1 x 1
  • Linux 之exit() 进程退出函数

    进程的退出 linux下进程数量太多会导致系统崩溃 在使用完一个进程之后要及时终止它 进程退出一般有三种方法 1 在main函数中使用 return关键字 使用 return 后系统会调用 exit 函数来终止进程 2 手动调用 exit
  • C++ 关于 protobuf的一些操作

    先是定义部分 下面跟一些例子组成 message DBRoleData uint64 RoleID 2 string Name 6 repeated int64 Action 12 存内置重复单位 message DBRoleLoginAc