nanopb分析和使用说明
2014-02-14 23:28
155 查看
经过资料收集,nanopb、protobuf-c、upb、pdb等均是采用Google的Protocol Buffers格式进行消息编解码的C语言库,根据项目的业务需求,我们决定采用nanopb进行数据数据的序列化。
之所以选择nanopb原因是其提供的编解码接口是通用的,如下面的编解码接口:
bool pb_encode(pb_ostream_t *stream, const pb_field_t fields[], const void *src_struct);
bool pb_decode(pb_istream_t *stream, const pb_field_t fields[], void *dest_struct);
不像protobuf-c会为每个pb中的结构体单独生成编解码接口,nanopb采用了一个通用的编解码接口,只是第二个参数使用源或目标结构体的描述(该描述根据PB文件自动生成),就可以将第三个参数(结构体)编码或将数据填充到结构体中。
下面我们来分析一下,nanopb的整个处理流程:
(1)首先需要定义一个.proto文件,该文件描述结构体的字段信息,如下所示:
import "nanopb.proto";
message Person {
required string name = 1 [(nanopb).max_size = 40];
required int32 id = 2;
optional string email = 3 [(nanopb).max_size = 40];
enum PhoneType {
MOBILE = 0;
HOME = 1;
WORK = 2;
}
message PhoneNumber {
required string number = 1 [(nanopb).max_size = 40];
optional PhoneType type = 2 [default = HOME];
}
repeated PhoneNumber phone = 4 [(nanopb).max_count = 5];
}
(2)然后使用nanopb提供的python脚本,生成结构体的描述信息,执行该脚本后,可以生成文件person.pb.c和person.pb.h;
(3)完成上面的工作后,就可以在应用程序的代码中使用Person的编解码功能了,示意代码如下:
nanopb
之所以选择nanopb原因是其提供的编解码接口是通用的,如下面的编解码接口:
bool pb_encode(pb_ostream_t *stream, const pb_field_t fields[], const void *src_struct);
bool pb_decode(pb_istream_t *stream, const pb_field_t fields[], void *dest_struct);
不像protobuf-c会为每个pb中的结构体单独生成编解码接口,nanopb采用了一个通用的编解码接口,只是第二个参数使用源或目标结构体的描述(该描述根据PB文件自动生成),就可以将第三个参数(结构体)编码或将数据填充到结构体中。
下面我们来分析一下,nanopb的整个处理流程:
(1)首先需要定义一个.proto文件,该文件描述结构体的字段信息,如下所示:
import "nanopb.proto";
message Person {
required string name = 1 [(nanopb).max_size = 40];
required int32 id = 2;
optional string email = 3 [(nanopb).max_size = 40];
enum PhoneType {
MOBILE = 0;
HOME = 1;
WORK = 2;
}
message PhoneNumber {
required string number = 1 [(nanopb).max_size = 40];
optional PhoneType type = 2 [default = HOME];
}
repeated PhoneNumber phone = 4 [(nanopb).max_count = 5];
}
(2)然后使用nanopb提供的python脚本,生成结构体的描述信息,执行该脚本后,可以生成文件person.pb.c和person.pb.h;
(3)完成上面的工作后,就可以在应用程序的代码中使用Person的编解码功能了,示意代码如下:
nanopb
相关文章推荐
- MySQL性能分析及explain的使用说明
- 下拉刷新实现步骤分析及RefreshListView的使用步骤说明
- 高维数据的应对手段: 主成分分析(PCA)简介+numpy实现+weka使用说明
- 静态分析工具PMD使用说明 (文章来源: Java Eye)
- ios NSURLSession使用说明及后台工作流程分析
- NSURLSession使用说明及后台工作流程分析
- MySQL性能分析及explain的使用说明
- node-sqlite3源码分析 - 准备知识 - sqlite3 API使用说明
- Volley使用说明与简单分析
- NSURLSession使用说明及后台工作流程分析
- ios NSURLSession使用说明及后台工作流程分析
- 免费动态域名解析软件nat123技术性原理分析及使用方法说明
- EasyICE TS流分析软件 -使用说明
- 从NSURLSession下载和断点续传到NSURLSession使用说明及后台工作流程分析
- twemproxy for redis使用说明及简单分析
- Google Analytics(分析) 说明,使用
- NSURLSession使用说明及后台工作流程分析
- 静态分析工具PMD使用说明
- DexHunter的原理分析和使用说明(一)
- 静态分析工具PMD使用说明