Protobuf:更小,更快,更高效的协议

在序言之前,请分享有关JSON的使用:用于嵌入式实践知识的JSON数据示例。

JSON类型的数据可读性强,但是整个数据包将包含一些无用的数据,这将在一定程度上带来通信负担。

在本文中,我们将分享一种较轻的数据格式-protobuf。

protobuf的优点:更小,更快和更简单。

支持多种编程语言。

分辨率很快。

强大的可扩展性。

什么是protobuf和protobuf-c?协议缓冲区是Google开发的一种数据格式,类似于XML,它可以序列化结构化数据,并且可以用于数据存储,通信协议等。

它不依赖于语言和平台,并且具有极大的可扩展性。

protobuf仓库:github:https://github.com/protocolbuffers/protobuf下载速度相对较慢,您可以先将其导入到代码云中,然后再下载。

Protobuf支持多种编程语言:如您所见,protobuf支持某些主流语言,但不支持C。

因此,第三方protobuf-c诞生了。

protobuf-c存储库:https://github.com/protobuf-c/protobuf-c要安装protobuf和protobuf-c,我们需要使用基于C语言的protobuf。

首先,我们需要安装protobuf和protobuf-c。

以下是Ubuntu下的安装方法:1.安装protobuf。

安装protobuf需要一些工具。

您需要先安装依赖项:sudo apt-get install autoconf automake libtool curl make g ++ unzip安装依赖项后,输入以下命令进行下载,编译,安装(如果下载速度较慢,则可以先导入代码云然后下载)protobuf:git clone https://github.com/protocolbuffers/protobuf.gitcd protobuf./autogen.sh./configuremakesudo make installsudo ldconfig其中,执行./autogen。

为了生成configure配置脚本,可执行sh命令以生成Makefile文件,执行make进行编译,执行sudo make install命令进行安装,并执行sudo ldconfig命令以使动态链接库被共享。

系统。

2.安装protobuf-c。

同样,protobuf-c也依赖于pkg-config。

输入以下命令进行安装:sudo apt-get install pkg-config,然后输入以下命令下载,编译和安装protobuf-c:git clone https://github.com/protobuf-c/protobuf-c。

git cd protobuf-c./autogen.sh./configuremakesudo make install如果以上述方式安装,则protobuf和protobuf-c默认安装在/ usr / local路径中:提醒:安装过程中可能存在各种错误。

遇到错误时,请仔细阅读错误说明和本文中的安装步骤,以查看是否错过了任何步骤。

demoprotobuf练习的核心是一个.proto文件。

我们自定义一个.proto来创建我们的协议数据,然后使用protoc-c工具来编译和生成C代码。

有两个文件:头文件和源文件。

例如,我们创建一个student.proto文件:消息Student {必需的字符串名称= 1;所需的uint32 num = 2;必需的uint32 c_score = 3;}语法2有两种版本,syntaxproto3和语法2。

,我们使用proto2。

与C语言类似,.proto也指定一些数据格式。

例如,proto2的数据类型为:double,float,int32,uint32,string等。

在此示例中,message是关键字,修改后的Student将在C语言中生成Student结构。

需要修改前缀的地方,表示必填字段。

另外还有两个修饰符关键字:optional:声明该字段是可选的。

重复:声明该字段是可重复字段,通常由数组或列表表示。

使用protoc-c工具来编译student.proto文件命令:protoc --c_out =。

这时,student.proto编译将生成两个文件student.pb-c.c和student.pb-c.h。

让我们看一下student.pb-ch中的内容:您可以看到在Student.pb-ch中生成了一个协议数据结构和一些用于操作该结构的接口,包括打包和解包接口,以及相应的学生。

这些接口的相应实现在pb-cc中。

编写我们的student.c测试演示:左右滑动以查看所有代码>>>>>>> #include #include #include #include #include“ student.pb-ch” int main(void){学生pack_stu = {0}; uint8_t buffer [512] = {0};学生* unpack_stu = NULL; size_t len = 0;学生__init(& pack_stu); / *组包* / pack_stu.name =“ ZhengN”; Pack_stu.num = 88; Pack_stu.num = 88; Pack_stu.c_pack_stu.c(& pack_stu,缓冲区); printf(“ len =%ld &“; len); / *解压* / unpack_stu = student__unpack(NULL,len,buffer); printf(" unpack_stu.name =%s &quot ;, unpack_stu->名称); printf(“ unpack_stu.num =%d &quot ;, unpack_stu-> num); printf(“ unpack_stu。

联系方式

Advanced Analogic Technologies Incorporated (AnalogicTech)是移动消费电子产品全面电源管理(Total Power Managementä)半导体解决方案提供商,产品应用于诸如各种无线电话、笔记本电脑和平板电脑、智能电话、数码相机、无线局域网(WLAN)和个人媒体播放器等等产品中。公司面向消费、通信和计算应用等领域内快速发展的各种设备,专注于开发和销售满足不同应用需求的电源管理方案。AnalogicTech还开发和授权各种器件、工艺、封装和应用相关技术。AnalogicTech总部位于美国加州圣克拉拉和澳门特别行政区,并在中国(北京、上海和深圳)、香港、日本、韩国、瑞典、法国和英国等国家和地区设立了办事处,同时还拥有遍及全球的销售代理和分销商网络。

查看详情

在线咨询