范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文

Protobuf一种更小更快更高效的协议

  前言
  之前分享关于JSON的使用:例说嵌入式实用知识之JSON数据 。JSON类型数据可读性很好,但是整个数据包中会带有一些无用的数据,自然会在一定程度上带来通信负担。本篇文章我们来分享一种更轻量的数据格式——protobuf。
  protobuf的优点:更小、更快、更简单。支持多种编程语言 。解析速度快。可扩展性强。
  什么是protobuf、protobuf-c?
  Protocol Buffers ,是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.git cd protobuf ./autogen.sh ./configure make sudo make install sudo ldconfig
  其中,执行./autogen.sh 命令为了生成configure配置脚本,执行configure 可生成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 ./configure make sudo make install
  按以上方式安装的话,protobuf与protobuf-c默认安装在/usr/local 路径下:
  温馨提示:安装过程可能会出现各种各样的错误,遇到错误的时候仔细看错误描述及看本篇文章安装步骤,看是否遗漏了哪一步。
  实践demo
  protobuf的核心是一个.proto 文件,我们自定义一个.proto 来创建我们的协议数据,然后使用protoc-c工具 编译生成C代码,有两个文件:一个头文件、一个源文件。
  例如我们创建一个student.proto 文件:syntax = "proto2";   message Student {     required string name    = 1;     required uint32 num     = 2;     required uint32 c_score = 3; }
  其中syntax为语法版本,有proto2、proto3两个版本,我们使用proto2。同C语言类似,.proto也规定了一些数据格式,如proto2的数据类型有: double 、 float、 int32 、 uint32 、 string 等。本例中,message为关键字,修饰的Student会对应生成我们C中的Student结构体。其中required为前缀修饰,表明该字段是必填字段。还有其它两个修饰关键字:optional:声明该字段是可选字段。repeated:声明该字段是可重复字段,通常用数组表示,也可以是list。
  使用protoc-c工具 工具编译student.proto 文件的命令:protoc --c_out=. student.proto
  此时编译会生成student.pb-c.c、student.pb-c.h两个文件。我们看看student.pb-c.h里面有什么:
  可以看到,student.pb-c.h里生成了一个协议数据结构体与操作该结构体的一些接口,包括组包与解包接口,对应的student.pb-c.c里就是这些接口对应的实现。
  编写我们的student.c测试demo:// 公众号:嵌入式大杂烩 #include  #include  #include  #include "student.pb-c.h"  int main(void) {     Student pack_stu = {0};     uint8_t buffer[512] = {0};     Student *unpack_stu = NULL;     size_t len = 0;      student__init(&pack_stu);      /* 组包 */     pack_stu.name = "ZhengN";     pack_stu.num = 88;     pack_stu.c_score = 90;     len = student__pack(&pack_stu, buffer);     printf("len = %ld ",len);      /* 解包 */     unpack_stu = student__unpack(NULL, len, buffer);     printf("unpack_stu.name = %s ", unpack_stu->name);     printf("unpack_stu.num = %d ", unpack_stu->num);     printf("unpack_stu.c_score = %d ", unpack_stu->c_score);      student__free_unpacked(unpack_stu, NULL);     return 0; }
  demo很简单,组包就是构造一个协议数据结构体,调用pack组包接口往buffer中扔数据;解包正好是反过来,从buffer中拿数据放到结构体里。
  编译命令:gcc student.c student.pb-c.c -o student -lprotobuf-c
  加上-lprotobuf-c 参数链接动态链接库protobuf-c.so ,因为前面安装操作的时候有使用ldconfig命令了,所以这里不需要指定动态库路径,否则需要指定,指定方法参照往期文章:静态链接与动态链接,静态链接与动态链接(Linux)
  编译运行:
  如果运行时报错:找不到动态库 。可输入如下命令导出动态库:export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH
  具体解释可查看往期文章:静态链接与动态链接(Linux)
  以上就是本次关于protobuf的分享,本文给出了pc上的实例,感兴趣的小伙伴不妨尝试运用到stm32、嵌入式Linux中,后续有机会的话再继续做相关分享。
  如果觉得文章有用,记得给小编点个赞哦
  1024G 嵌入式资源大放送!包括但不限于C/C++、单片机、Linux等。私信回复 1024,即可免费获取!

看我七十一变,高斯ALT71D双模机械键盘分享GANSS(虽然品牌名为迦斯,但我还是称之为高斯吧)这个品牌,以高性价比和良好的大键调校手感在键圈内可算是久负盛名。今天分享的这款ALT71D双模键盘,其血统源于自家的CNC金属分替代传统U盘的USSD固态U盘到底有多强?U盘和移动硬盘作为常用的存储设备,是很多朋友生活和工作的重要帮手特别是移动固态硬盘凭借着更大容量存储更快传输速度逐渐取代了传统U盘,受到了更多人的青睐。的确,传统U盘除了轻便小巧外如何鉴别驾驶证的真伪前些日子看到一则新闻,一车友开了3年车后发现自己花钱买的驾驶证是假的,原来这些年自己是无证驾驶。那么如何识别自己的驾驶证呢,今天小编又重新整理了一番,共同学习!驾驶证的识别在国内,这些车险增值服务你一定要知道你以为买了车险,保险公司就不理你了吗,其实不然,保险公司还是有挺多增值服务的,你不知道就亏了!一基础服务1极速理赔投保的家庭自用汽车客户,发生不涉及人伤物损且车辆损失在万元(含)以定档3月11日!FindX3将会为我们带来什么惊喜?3月1日,OPPO正式官宣将在3月11日发布旗下最新旗舰OPPOFindX3系列。OPPOFindX3系列将是OPPO十年的理想之作,同时也是OPPO上探安卓顶级旗舰的一个新探索,致求职者薪资谈判不要怂,三招助你拿高薪,HR不会告诉你的秘密汪Sir观点作为一名HR,现实工作中我遇到不少求职者,辛辛苦苦撰写简历,认认真真准备面试。最后却在谈薪时,要么忍让退缩,要么一拍两散。出现这种情况的原因,是因为面对薪资谈判,HR是新能源综合知识(第四季)1。依据GBT32960,发动机数据保护下列哪些项目(BCD)A发动机转速B发动机状态C曲轴转速D探针温度值2。电池的工作温度,关系到电动汽车使用安全(A)A正确B错误3。依据GB深圳市公积金管理中心历时3年,为131名劳动者讨回应得的公积金公司不给员工交公积金,违法吗?公司让员工签字放弃公积金,就可以免责吗?员工拿了补偿,还能要求企业补缴公积金吗?公司不交公积金,有地方管吗?深圳小小公司(化名)因为不为员工缴纳公积金要工伤赔偿,难难难!外卖骑手的劳动关系是如何给整没的?外卖小哥每天奔波在大街小巷,出交通事故的概率也高于普通职业。那外卖小哥出了事故算工伤吗?能得到应有的赔偿吗?依据中国裁判文书网披露的一则民事判决书显示,外卖骑手在送餐途中出了事故,娜比是演奏家?演员?主播?学生?明白这些,你也能成为斜杠青年汪Sir说第一次知道欧阳娜娜,是在她参加偶像来了第一季时的匆匆一瞥。那时只是很好奇,一位拉大提琴的小女孩,怎么和那些明星一起参加综艺节目?再次注意她,已是今年3月份的事了。因为在满十荟团被曝大量裁员,网传员工未拿到法定赔偿,这种情况该怎么办上午还在卖力工作,下午通知解散收电脑,没有任何赔偿,不签字8月工资都没有。十荟团成都分公司的小赵如是说。作为国内知名生鲜电商大佬之一的十荟团,近期曝出大裁员的新闻。不少员工在社交媒
在国内持有比特币并进行交易违法吗?寄语每一天都是新的开始,在这个投资市场上,大多投资者开始的时候都是抱着赚钱的心态入市,可是亏损的原因日益加重,对赌的心态,不服输的心态,慢慢滋生。开始为了赚钱做单,后来只为解单做单B85主板是不是很老了,i54590直播游戏很吃力!怎么升级?卖掉,换新直播游戏需要多线程,换成四核八线程的E31231V3试试硬盘是固态的吗?显卡什么型号?电脑是木桶效应,CPU问题不是特别大,建议升级内存,显卡,固态,肯定会很大程度提升性俄抛97美债,向中国运现钞后,或彻底与美元了断,印度开始去美元化俄罗斯卫星通讯社5月31日报道,俄相关人士称,美国正在发出威胁,SWIFT系统可能卷入对俄制裁螺旋。所有人都知道,有人正在威胁把俄罗斯从SWIFT系统中除名,首先是美国。SWIFT为什么一些人看到五十多六十多的人玩手机或电脑很熟练,感觉惊讶?一些人看到五六十岁的人玩手机或电脑特别熟,感到惊讶,是他们对一些五六十岁的人还不太了解。现在五六十岁的人看起来似乎是思想僵化手笨脚笨落后于时代的老古董了,但是他们当中有许多人在二三国产四大品牌手机,哪个的故障比较多?返修率最高的是小米,其次是华为,剩下的两家质量较好。小米综合质量最差,其他三个半斤八两,都差不多有权威数据统计,华为的手机故障最多,经常自燃(但都被华为强大的公关给和X了),其他三天才张锋应社教育与应试教育的交锋革命性技术钱景无限2022年2月3月间,一则科技界新闻被国内科技媒体广泛报道美国专利和商标局(USPTO)裁定CRISPRCas9基因编辑技术专利属于美国哈佛和麻省理工学院博德研究现在在淘宝网,有卖很多希捷西数,东芝的,2t硬盘。上面很多都是,标价在300零点?我就上当了,买了一个2TB的西数移动硬盘,说是全新没有用过,是exFAT格式的,结果在分区时出问题了,导致硬盘无法识别,拆开发现,原来是160G硬盘扩容的,大家一定要注意警惕exF有没有靠谱的手机兼职?有大量时间,求推荐?有没有靠谱的手机兼职?有大量时间,求推荐?首先推荐的就是今日头条上面兼职啊,今日头条是一个非常好的平台,在今日头条上面兼职没有任何的套路,你可以在今日头条上面写文章,这个需要一定的来头条很多天了,有一起坚持的吗?账号已经注册了四年多,真正在上面写文章也就20天左右,每天坚持去原创一些作品,能看到收益固然是好事,但现在每天看到的也就是几毛!每次刷头条,看见那些大神动不动就几十上百万推荐,几万我国发布首个智能农机技术路线图到十四五末形成一批商业化无人农场央视网消息今天(5月18日),由工业和信息化部指导,我国发布了首个智能农机技术路线图。记者了解到,智能农机技术路线图是在我国连续四年农业全过程无人作业试验的基础上,由农机车辆电子信妇炎洁广告被指侮辱女性怎么回事?客服回应已经撤下相关广告详情页5月17日消息,有网友曝料称,妇炎洁淘宝官方旗舰店的一款产品存在侮辱女性的行为,其广告语详情介绍页面内容让人感到极度不适。不少网友留言表示,一个女性产品如此恶臭发言,给女性制造焦虑