1. 前期准备

  • 完成protocbuf的安装:https://blog.csdn.net/qq_28256407/article/details/115323428
  • 完成protoc文件的编写:https://blog.csdn.net/qq_28256407/article/details/118676100
  • 生成对应的头文件:https://blog.csdn.net/qq_28256407/article/details/115323428

实例所使用的proto文件如下

test.proto

syntax = "proto3";        // 指定protoc的版本,防止编译时出错message AdressBook {int32 seq = 1;   message Person {     // 嵌套string name = 1;int32 id = 2;string email =3;string  gender = 4;Fruits Favourit_Fruit = 5;} repeated Person people = 2;}enum Fruits {        // 枚举apple = 0;grape = 1;banana = 2;pear = 4;
}

2. C++中的使用

注意:首先使用以下命令,将protoc转换成c++对应头文件进行使用。

$ protoc --cpp_out=. ./test.proto      # 将protoc文件在当前文件夹生成在C++使用的 test.pb.cc 和 test.pb.h文件

C++使用实例:

test.cpp

#include "test.pb.h" // 引入proto的头文件
int main()
{AdressBook test; //定义指定类型的数据test.set_seq(1); // 给其中的成员赋值AdressBook_Person *test_1 = test.add_people(); // 给可重复的成员赋值test_1->set_name("Tom");test_1->set_favourit_fruit(Fruits::banana); // 枚举类型的访问AdressBook_Person *test_2 = test.add_people();test_2->set_name("Peter");test_2->set_favourit_fruit(Fruits::apple);std::string str; // 序列化到stringtest.SerializeToString(&str);AdressBook get_test;get_test.ParseFromString(str); // 对数据进行反序列化std::cout << "get_test seq: " << get_test.seq() << std::endl;for (int i = 0; i < test.people_size(); i++) // 访问可重复的成员{const AdressBook_Person get_test_1 = test.people(i);std::cout << get_test_1.name() << std::endl;std::cout << get_test_1.favourit_fruit() << std::endl;}
}

使用如下g++命令对上述文件进行编译

$ g++ -o test test.cpp test.pb.cc -lprotobuf

注意:: C++在使用protoc过程中,默认将变量的大小写都转成了小写字母。这块与Python有所区别,注意躲坑!!!

注意:: C++在使用protoc过程中,默认将变量的大小写都转成了小写字母。这块与Python有所区别,注意躲坑!!!

注意:: C++在使用protoc过程中,默认将变量的大小写都转成了小写字母。这块与Python有所区别,注意躲坑!!!

3. Python中使用

注意:首先使用一下命令将,protoc转换成Python对应的库进行使用

$ protoc --python_out=. ./test.proto     # 将protoc文件在当前文件夹生成在Python使用的test_pb2.py文件

python使用实例

from test_pb2 import *       # 引入头文件test = AdressBook()        # 定义对象test.seq = 1                    # 给对象中的成员赋值
test_1 = test.people.add()      # repeated 成员变量的赋值
test_1.name = "Tom"
test_1.Favourit_Fruit = Fruits.bananatest_2 = test.people.add()
test_2.name = "Peter"
test_2.Favourit_Fruit = Fruits.grape       # 不知道为啥,枚举为0的类型 打印不出来。所以这里改了一下其他的类型str = test.SerializeToString()      # 序列化get_test = AdressBook()
get_test.ParseFromString(str)       # 反序列化
print(get_test)

注意:: Python在使用protoc过程中,大小写变量保持原状。区别于C++

protobuf在C++和Python的使用相关推荐

  1. python中使用 protocol buffer(Protobuf)

    项目中引入proto的依赖 [两种方法]: 方法1. 官网下载对应的语言包,https://github.com/protocolbuffers/protobuf/releases 这里选择pytho ...

  2. protobuf序列化协议python教程

    全栈工程师开发手册 (作者:栾鹏) 架构系列文章 Protobuf? 是什么? Google Protocol Buffer(简称 Protobuf)是一种轻便高效的结构化数据存储格式,平台无关.语言 ...

  3. 如何下载python软件-python如何下载

    广告关闭 腾讯云双11爆品提前享,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高满返5000元! python的语法结构很简单,或者说书本里面的东西很容易掌握. 但是你要把pyth ...

  4. python安装caffe_Caffe安装笔记二:Caffe安装过程

    下面开始正题,caffe的安装过程.因为出问题很多,所以实际上我是尝试了python2和python3两种python的接口.下面一并放出来. 1.安装build-essential sudo apt ...

  5. caffe下matlab、python的配置和faster RCNN的运行

    因为自己的电脑没有安装linux环境,显卡也不支持CUDA,所以在实现faster RCNN的demo的过程中还是很麻烦的. 完善项目文件 下图是vs2013 打开的caffe解决方案的工程目录.由于 ...

  6. protobuf java linux_linux下安装protobuf及其使用

    linux下安装protobuf及在python与php上的应用 下载解压源文件 github上的版本发布地址 https://github.com/protocolbuffers/protobuf/ ...

  7. python 自动生成文档

    python 自动生成文档 python 自动生成文档 一.配置文档 二.protobuf 三.代码 python 自动生成文档 一.配置文档 register.temeprate # Datetim ...

  8. 以小见大——那些基于 protobuf 的五花八门的 RPC(5 完)

    赖勇浩(http://laiyonghao.com) 快刀斩乱麻,祭上最后两个 rpc 分析,再整上我自己的设计,这个系列就完结了. protobuf-socket-rpc 好,废话不多说,看看这个 ...

  9. go和python区别_go和python_go 和python_go和python区别 - 云+社区 - 腾讯云

    广告关闭 回望2020,你在技术之路上,有什么收获和成长么?对于未来,你有什么期待么?云+社区年度征文,各种定制好礼等你! 开发者 2020 年最想学习的编程语言是 go? 连续三年,go 都是开发者 ...

最新文章

  1. 滑动窗口与拥塞窗口_流云哭翠-ChinaUnix博客
  2. python gevent缺点_python的flask框架结合gevent性能反而大幅度下降?
  3. 监督学习—最小二乘法
  4. 屏幕Screen类文件编写
  5. mysql 把一个字段的值_mysql把一个表某个字段的内容复制到另一张表的某个字段的SQL语句写法...
  6. Java与MySQL连接报错_java连接数据库报错(
  7. uft自动化测试工具安装步骤_自动化测试灵魂三问:是什么、为什么和做什么
  8. 计算机毕业论文java毕业设计成品源码网站基于SSM实现的仓库管理系统
  9. W ndows10开机密码设置,Win10系统开机密码输入正确却提示微软帐户无法登录的三种解决方法...
  10. 【网络通信 -- 直播】SRS 实战记录 -- 开源流媒体服务器对比与 SRS 直播效果测试
  11. 制定目标时需要遵循的SMART原则
  12. ACER-4738ZG 拆机改散热
  13. 红米5plus开发者选项怎么打开?
  14. 巴比特 | 元宇宙每日必读:工业元宇宙究竟是什么,为何它值得被追捧?
  15. 13、用 k8s 管理机密信息Secret、查看 Secret、volume 方式使用 Secret、环境变量方式使用 Secret、用 ConfigMap 管理配置
  16. 求两点之间最短路径-Dijkstra算法
  17. 阿里p8年薪85W到底是什么样的存在?
  18. ZYNQ有两个CPU?(二)——OCM共享内存
  19. 高二会考计算机分数,会考成绩abcd各是多少分 会考成绩对高考有影响吗
  20. python代码加密解密_Python加密解密代码

热门文章

  1. 4.试用期个人工作总结(篇四)
  2. 2022-2028全球与中国儿童注意力缺陷和多动障碍市场现状及未来发展趋势
  3. 更改服务器网站默认端口,更改服务器默认端口号
  4. 即将步入研究生,有什么建议?
  5. layui button标签
  6. 复制链接到safari浏览器打开_通过 URL 协议实现从 Safari 等浏览器中跳转打开你的 app...
  7. 华三的AC对接绿洲平台的无线认证配置
  8. linux部署jia包常用命令
  9. org.dom4j.DocumentException: Error on line 1 of document : Content is not allowed in prolog. Nested
  10. oracle 索引命中条件,Oracle索引命中与扫描规律总结 | 学步园