Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >protobuf 的 C++函数使用手册

protobuf 的 C++函数使用手册

作者头像
看、未来
发布于 2021-12-20 11:52:10
发布于 2021-12-20 11:52:10
2.5K00
代码可运行
举报
运行总次数:0
代码可运行

文章目录

使用message

类成员变量的访问

在生成的.h文件中定义了类成员的访问方法。例如,对于Person类,定义了name、id、email、phone等成员的访问方法。

获取成员变量值直接采用使用成员变量名(全部为小写),设置成员变量值,使用在成员变量名前加set_的方法。

对于普通成员变量(required和optional)提供has_方法判断变量值是否被设置;提供clear_方法清除设置的变量值。

对于string类型,提供多种set_方法,其参数不同。同时,提供了一个mutable_方法,返回变量值的可修改指针。

对于repeated变量,提供了其它一些特殊的方法:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
_size方法:返回repeated field’s
通过下脚标访问其中的数组成员
通过下脚标返回其中的成员的mutable_的方法
_add方法:增加一个成员。
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// name
inlinebool has_name()const;
inlinevoid clear_name();
inlineconst::std::string& name()const;
inlinevoid set_name(const::std::string& value);
inlinevoid set_name(constchar* value);
inline::std::string* mutable_name();
 
 
 
// id
inlinebool has_id()const;
inlinevoid clear_id();
inline int32_t id()const;
inlinevoid set_id(int32_t value);
 
 
 
// email
inlinebool has_email()const;
inlinevoid clear_email();
inlineconst::std::string& email()const;
inlinevoid set_email(const::std::string& value);
inlinevoid set_email(constchar* value);
inline::std::string* mutable_email();
 
 
 
// phone(那俩不会用的我已经删掉了,不用也罢)
inlineint phone_size()const;
inlinevoid clear_phone();
inlineconst::tutorial::Person_PhoneNumber& phone(int index)const;
inline::tutorial::Person_PhoneNumber* mutable_phone(int index);
inline::tutorial::Person_PhoneNumber* add_phone();

编码和解码函数

每个message类都提供了写入和读取message数据的方法,包括:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
bool SerializeToString(string* output) const;把message编码进output。 
bool ParseFromString(const string& data);从string解码到message
bool SerializeToArray(char* buf,int size) const;把message编码进数组buf.
bool ParseFromArray(const char* buf,int size);把buf解码到message。
此解码方法效率较ParseFromString高很多,所以一般用这种方法解码,而且IO函数一般是以char*交流的,不是string。
bool SerializeToOstream(ostream* output) const;把message编码进ostream
bool ParseFromIstream(istream* input);从istream解码到message

发送接收端所使用的加码解码方法不一定非得配对,即发送端用SerializeToString 接收端不一定非得用ParseFromString ,可以使用其他解码方法。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021/12/20 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Protocol Buffers C++入门教程
protobuf(Protocol Buffers )是Google的开源项目,是Google的中立于语言、平台,可扩展的用于序列化结构化数据的解决方案。官网见:here,源码见:github。
恋喵大鲤鱼
2018/08/03
13.3K0
Protocol Buffers C++入门教程
google protobuf学习笔记:编译安装、序列化、反序列化
简介 protobuf也叫protocol buffer是google 的一种数据交换的格式,它独立于语言,独立于平台。google 提供了多种语言的实现:java、c#、c++、go 和 python,每一种实现都包含了相应语言的编译器以及库文件。由于它是一种二进制的格式,比使用 xml 、json进行数据交换快许多。可以把它用于分布式应用之间的数据通信或者异构环境下的数据交换。作为一种效率和兼容性都很优秀的二进制数据传输格式,可以用于诸如网络传输、配置文件、数据存储等诸多领域。 prot
_gongluck
2018/03/09
13.5K1
Protobuf协议?盘他!
Protobuf是Google基于C++ 进行的实现的一套数据序列化/反序列化库,开发人员可以根据 ProtoBuf 的语言规范生成多种编程语言(C++、Python、Java 等)的接口代码。使用ProtoBuf的文件在存储效率上和处理性能上都元高于XML,也具有更好的跨平台性,使用灵活。
audy
2019/04/28
1.5K0
Protobuf协议?盘他!
protobuf 与 redis 的结合
使用的时候呢,先把那个插入数据的代码放出来,把数据插进去,再用后面读的去读(其实也可以一气呵成,我就直接放出来了)
看、未来
2021/12/20
1.8K0
【ProtoBuf】文件编写及序列化
为了快速上手以及完整的使用ProtoBuf,我们将编写一个小项目,并根据PB学习程度对这个项目来逐渐改版,每一个版本对应PB的新知识点。在后续内容中,会使用简单的通讯录作为项目实现。
用户11029129
2025/02/18
2860
【ProtoBuf】文件编写及序列化
【Protobuf】一、初始Protobuf && 快速上手
​ 简单的说:ProtoBuf 是需要依赖通过编译生成的头文件和源文件来使用的。有了这种代码生成机制,开发人员再也不用吭哧吭哧地编写那些协议解析的代码了!
利刃大大
2025/05/22
3240
【Protobuf】一、初始Protobuf && 快速上手
Protocol Buffers(3):阅读一个二进制文件
编写addressbook.proto文件,在官方例子上略作修改,增加了float字段,以分析浮点数的存储方式。
李拜六不开鑫
2019/05/07
2.3K0
Protocol Buffers(3):阅读一个二进制文件
Google 开源技术protobuf
protobuf是google提供的一个开源序列化框架,类似于XML,JSON这样的数据表示语言,其最大的特点是基于二进制,因此比传统的XML表示高效短小得多。虽然是二进制数据格式,但并没有因此变得复杂,开发人员通过按照一定的语法定义结构化的消息格式,然后送给命令行工具,工具将自动生成相关的类,可以支持php、java、c++、python等语言环境。通过将这些类包含在项目中,可以很轻松的调用相关方法来完成业务消息的序列化与反序列化工作。
黄规速
2022/04/15
2.4K0
google ProtoBuf开发者指南
目录1  概览1.1  什么是protocolbuffer1.2  他们如何工作1.3Python
Java架构师必看
2021/03/22
1.4K0
protobuf篇:介绍、安装、官方教程翻译、测试
综上所述目前最好的设计消息数据包方式是服务器和客户端通信协议推荐用protobuf,服务器存入数据库时用json。
看、未来
2021/10/28
1.7K0
protobuf篇:介绍、安装、官方教程翻译、测试
Protobuf简单使用
如果 .proto 文件包含 package 声明,则该文件的所有内容都将放置在相应的 C++ 命名空间中。例如,给定 package 声明
Andromeda
2024/07/27
2530
【protobuf】四、proto3语法详解③ -- 默认值 && 消息更新规则 && option选项
​ 反序列化消息时,如果被反序列化的二进制序列中不包含某个字段,反序列化对象中相应字段时,就会设置为该字段的默认值。不同的类型对应的默认值不同:
利刃大大
2025/02/08
5020
【protobuf】四、proto3语法详解③ -- 默认值 && 消息更新规则 && option选项
Python 在Python中使用Protocol Buffers基础介绍
https://github.com/protocolbuffers/protobuf/releases
授客
2024/11/21
3240
caffe源码学习之Proto数据格式【1】
前言:   由于业务需要,接触caffe已经有接近半年,一直忙着阅读各种论文,重现大大小小的模型. 期间也总结过一些caffe源码学习笔记,断断续续,这次打算系统的记录一下caffe源码学习笔记,巩固一下C++,同时也梳理一下自己之前的理解。 正文:   我们先不看caffe的框架结构,先介绍一下caffe.proto,是google开源的一种数据交互格式--Google Protobuf,这种数据的格式,我们可以看到caffe.proto中内容: syntax = "proto2"; package c
Gxjun
2018/03/27
1.9K0
caffe源码学习之Proto数据格式【1】
Protobuf协议初探(1)
Protobuf源码下载网址:源码地址 本人使用了 3.10 版本的 Protobuf,源码地址:ProtobufV3.10
何其不顾四月天
2023/03/10
7340
Protobuf协议初探(1)
【protobuf】二、proto3语法详解①
​ 在语法详解部分,依旧使用 项目推进 的方式完成教学。这个部分会对通讯录进行多次升级,使用 2.x 表示升级的版本,最终将会升级如下内容:
利刃大大
2025/05/22
1750
【protobuf】二、proto3语法详解①
【源码】protobuf 中各个压缩(Serialize)、解压缩(Parse)函数辨析
Methods for serializing in protocol buffer format. Most of these are just simple wrappers around ByteSize() and SerializeWithCachedSizes().
看、未来
2022/05/06
1.7K0
Google protocol buffer简介
Google Protocol Buffer Google Protocol Buffer又简称Protobuf,它是一种很高效的结构化数据存储格式,一般用于结构化数据的串行化,即我们常说的数据序列化。这种序列化的协议非常轻便高效,而且是跨平台的,目前已支持多种主流语言。通过这种方式序列化得到的二进制流数据比传统的XML, JSON等方式的结果都占用更小的空间,并且其解析效率也更高,非常适合用于通讯协议或数据存储。 为什么使用Protocol Buffers 通常序列化和解析结构化数据的几种方式? 使用Ja
xiangzhihong
2018/02/06
1.8K0
Google protocol buffer简介
Go with Protobuf
本教程使用proto3向 Go 程序员介绍如何使用 protobuf。通过创建一个简单的示例应用程序,它向你展示了如何:
孟斯特
2023/10/08
3510
Go with Protobuf
基于google protobuf的gRPC实现
Protobuf(Google Protocol Buffers)提供一种灵活、高效、自动化的机制,用于序列化结构数据。Protobuf仅需自定义一次所需要的数据格式,然后我们就可以使用Protobuf编译器自动生成各种语言的源码,方便我们读写自定义的格式化数据。另外Protobuf的使用与平台和语言无关,可以在不破坏原数据格式的基础上,扩展新的数据。
小一
2019/08/14
1.6K0
基于google protobuf的gRPC实现
相关推荐
Protocol Buffers C++入门教程
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档