您的位置:首页 > 运维架构

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: