protobuffer (简称PB) 网上的文章一大堆,随便看看,PB使用起来非常方便。这里主要讲讲Protobuf C(简称PC)的使用

1,代码

https://github.com/protobuf-c/protobufc/releases/download/v1.3.2/protobuf-c-1.3.2.tar.gz

2,编译

先决条件(PB也要安装)

sudo apt-get install autoconf automake libtool curl make g++ unzip

PC的编译

./autogen.sh && make &&make check之后sudo make install;sudo ldconfig

3,“编译”proto文件

protoc-c -I=./proto --c_out=./proto ./proto/main.proto

4,proto文件定义

这部分和PB是完全一样的,这里就不重复了

enum MessageType {
MSG_REQUEST = ;
MSG_NOTIFICATION = ;
} message Message {
MessageType type = ;
fixed32 seq = ;
fixed64 session_id = ;
string using_for_test = ;
Response response = ;
} message Response {
enum ResponseType {
RESPONSE_SYSTEM_STATE = ;
RESPONSE_HARDWARE_STATE = ; }
ResponseType response_type = ;
}

5,代码中对PC定义的数据的访问方式

生成一个消息

    /* example of using protobuf message */

    Message msg = MESSAGE__INIT;
Response res = RESPONSE__INIT; //response msg
msg.response = &res;
res.response_type = RESPONSE_HARDWARE_STATE; msg->using_for_test = (char *)malloc(PROTO_STRING_LEN);
memset(msg->using_for_test, , PROTO_STRING_LEN);

序列化一个消息

    //pack
int len = message__get_packed_size(&msg);
uint8_t *buf = (uint8_t *)malloc(len);
message__pack(&msg, buf);

反序列化一个消息

    Message*rev = message__unpack(NULL, len, buf);
message__free_unpacked(rev, NULL);

不要忘了手动释放申请的资源 (这点PC很麻烦,涉及到动态长度的元素,资源要手动申请释放)

  free(buf);
  free(msg->using_for_test);

Protobuf c的使用范例的更多相关文章

  1. python通过protobuf实现rpc

    由于项目组现在用的rpc是基于google protobuf rpc协议实现的,所以花了点时间了解下protobuf rpc.rpc对于做分布式系统的人来说肯定不陌生,对于rpc不了解的童鞋可以自行g ...

  2. Protobuf使用规范分享

    一.Protobuf 的优点 Protobuf 有如 XML,不过它更小.更快.也更简单.它以高效的二进制方式存储,比 XML 小 3 到 10 倍,快 20 到 100 倍.你可以定义自己的数据结构 ...

  3. java netty socket库和自定义C#socket库利用protobuf进行通信完整实例

    之前的文章讲述了socket通信的一些基本知识,已经本人自定义的C#版本的socket.和java netty 库的二次封装,但是没有真正的发表测试用例. 本文只是为了讲解利用protobuf 进行C ...

  4. 在Wcf中应用ProtoBuf替代默认的序列化器

    Google的ProtoBuf序列化器性能的牛逼已经有目共睹了,可以把它应用到Socket通讯,队列,Wcf中,身为dotnet程序员一边期待着不久后Grpc对dotnet core的支持更期待着Wc ...

  5. protobuf的编译安装

    github地址:https://github.com/google/protobuf支持多种语言,有多个语言的版本,本文采用的是在centos7下编译源码进行安装. github上有详细的安装说明: ...

  6. 编译protobuf的jar文件

    1.准备工作 需要到github上下载相应的文件,地址https://github.com/google/protobuf/releases protobuf有很多不同语言的版本,因为我们需要的是ja ...

  7. protobuf学习(2)-相关学习资料

    protobuf官方git地址 protobuf官方英文文档   (你懂的需要FQ) protobuf中文翻译文档 protobuf概述          (官方翻译 推荐阅读) protobuf入门 ...

  8. google protobuf安装与使用

    google protobuf是一个灵活的.高效的用于序列化数据的协议.相比较XML和JSON格式,protobuf更小.更快.更便捷.google protobuf是跨语言的,并且自带了一个编译器( ...

  9. c# (ENUM)枚举组合类型的谷歌序列化Protobuf

    c# (ENUM)枚举组合类型的谷歌序列化Protobuf,必须在序列化/反序列化时加上下面: RuntimeTypeModel.Default[typeof(Alarm)].EnumPassthru ...

随机推荐

  1. CentOS 7 SVN搭建 (YUM安装)

    1.检查已安装版本 rpm -qa subversion卸载旧版本SVNyum remove subversion2.安装SVNyum install subversion 3.验证安装svnserv ...

  2. Python网络爬虫与信息提取[request库的应用](单元一)

    ---恢复内容开始--- 注:学习中国大学mooc 嵩天课程 的学习笔记 request的七个主要方法 request.request() 构造一个请求用以支撑其他基本方法 request.get(u ...

  3. 洛谷P1072 [NOIP2009] Hankson 的趣味题

    P1072 Hankson 的趣味题 题目描述 Hanks 博士是 BT (Bio-Tech,生物技术) 领域的知名专家,他的儿子名叫 Hankson.现在,刚刚放学回家的 Hankson 正在思考一 ...

  4. python枚举详解

    1. 枚举的定义 首先,定义枚举要导入enum模块. 枚举定义用class关键字,继承Enum类. 用于定义枚举的class和定义类的class是有区别[下一篇博文继续分享]. 示例代码: from ...

  5. loadrunner录制脚本时登录密码转md5

    在录制用户注册登录脚本时,常常会遇到web程序对用户密码进行加密处理.在很多时候采用的加密方式为MD5. 这时有两种处理方式: 一.所有用户采用同一密码 例如:每个用户名的密码都为e10adc3949 ...

  6. 《2019年上半年Web应用安全报告》发布:90%以上攻击流量来源于扫描器,IP身份不再可信

    Web应用安全依然是互联网安全的最大威胁来源之一,除了传统的网页和APP,API和各种小程序也作为新的流量入口快速崛起,更多的流量入口和更易用的调用方式在提高web应用开发效率的同时也带来了更多和更复 ...

  7. Codeforces 442A

    题目链接 A. Borya and Hanabi time limit per test 2 seconds memory limit per test 256 megabytes input sta ...

  8. C++之ARX 读取配置文件内容时,会出现编码问题(utf-8转unicode)

    CString CConvert::UTF82WCS(const char* szU8){ //预转换,得到所需空间的大小; int wcsLen = ::MultiByteToWideChar(CP ...

  9. C++模板进阶指南:SFINAE

    C++模板进阶指南:SFINAE 空明流转(https://zhuanlan.zhihu.com/p/21314708) SFINAE可以说是C++模板进阶的门槛之一,如果选择一个论题来测试对C++模 ...

  10. chrome://inspect调试html页面空白,DOM无法加载的解决方案

    chrome://inspect调试html页面空白,DOM无法加载的解决方案 先描述一下问题 有一段时间没碰huilder hybird app 开发了,今天调试的时候 chrome://inspe ...