Protobuf c的使用范例
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的使用范例的更多相关文章
- python通过protobuf实现rpc
由于项目组现在用的rpc是基于google protobuf rpc协议实现的,所以花了点时间了解下protobuf rpc.rpc对于做分布式系统的人来说肯定不陌生,对于rpc不了解的童鞋可以自行g ...
- Protobuf使用规范分享
一.Protobuf 的优点 Protobuf 有如 XML,不过它更小.更快.也更简单.它以高效的二进制方式存储,比 XML 小 3 到 10 倍,快 20 到 100 倍.你可以定义自己的数据结构 ...
- java netty socket库和自定义C#socket库利用protobuf进行通信完整实例
之前的文章讲述了socket通信的一些基本知识,已经本人自定义的C#版本的socket.和java netty 库的二次封装,但是没有真正的发表测试用例. 本文只是为了讲解利用protobuf 进行C ...
- 在Wcf中应用ProtoBuf替代默认的序列化器
Google的ProtoBuf序列化器性能的牛逼已经有目共睹了,可以把它应用到Socket通讯,队列,Wcf中,身为dotnet程序员一边期待着不久后Grpc对dotnet core的支持更期待着Wc ...
- protobuf的编译安装
github地址:https://github.com/google/protobuf支持多种语言,有多个语言的版本,本文采用的是在centos7下编译源码进行安装. github上有详细的安装说明: ...
- 编译protobuf的jar文件
1.准备工作 需要到github上下载相应的文件,地址https://github.com/google/protobuf/releases protobuf有很多不同语言的版本,因为我们需要的是ja ...
- protobuf学习(2)-相关学习资料
protobuf官方git地址 protobuf官方英文文档 (你懂的需要FQ) protobuf中文翻译文档 protobuf概述 (官方翻译 推荐阅读) protobuf入门 ...
- google protobuf安装与使用
google protobuf是一个灵活的.高效的用于序列化数据的协议.相比较XML和JSON格式,protobuf更小.更快.更便捷.google protobuf是跨语言的,并且自带了一个编译器( ...
- c# (ENUM)枚举组合类型的谷歌序列化Protobuf
c# (ENUM)枚举组合类型的谷歌序列化Protobuf,必须在序列化/反序列化时加上下面: RuntimeTypeModel.Default[typeof(Alarm)].EnumPassthru ...
随机推荐
- Docker Tomcat部署
1.下载tomcat镜像 docker pull tomcat 2.上传项目 /etc/tomcat/webapps/ 3.启动tomcat容器 docker run -d --name tomcat ...
- 2018-11-1-WPF-Main-thread-gets-a-deadlock-when-stylus-input-thread-is-waiting-for-the-window-to-clos...
title author date CreateTime categories WPF Main thread gets a deadlock when stylus input thread is ...
- 提交方式get和post有什么区别
提交方式post和get有什么区别? (1)post是向服务器传送数据:get是从服务器上获取数据. (2)在客户端,get是把参数数据队列加到提交表单的ACTION属性所指的URL中,值和表单内各个 ...
- ASP.NET+C#面试题
1.维护数据库的完整性.一致性.你喜欢用触发器还是自写业务逻辑?为什么? 尽可能用约束(包括CHECK.主键.唯一键.外键.非空字段)实现,这种方式的效率最好:其次用触发器,这种方式可以保证无论何种业 ...
- myeclipse10 java builder path libraries 添加tomcat
Error: The import javax.servlet cannot be resolved The import javax.servlet.http.HttpServlet ...
- 集合-Collection接口
集合 和 数组 的比较: 数组 - 本质上就是在内存空间中申请的一段连续内存空间,存放多个相同类型的数据 - 数组一旦定义完毕,则在内存空间中的长度固定. - 插入/删除元素时可能导致大量元素的移动, ...
- DirectX11笔记(五)--Direct3D渲染1--VERTICES AND INPUT LAYOUTS
原文:DirectX11笔记(五)--Direct3D渲染1--VERTICES AND INPUT LAYOUTS 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.c ...
- linux类库之log4j-LogBack-slf4j-commons-logging
log4j http://commons.apache.org/proper/commons-logging/ http://logging.apache.org/log4j/2.x/ The Com ...
- R语言实现Xbar-R控制图
R语言实现Xbar-R控制图 Xbar-R控制图在质量管理中主要用于对计量数据进行检测,以达到控制对象质量的目的. 虽然用Excel可以轻松实现控制图的操作,不过作为R软件初学者,我试着用仅有的一点R ...
- Person Re-identification 系列论文笔记(八):SPReID
Human Semantic Parsing for Person Re-identification Kalayeh M M, Basaran E, Gokmen M, et al. Human S ...