如何将C结构体转换为Protocol Buffer C消息并简化数组字段定义
Protobuf C 转换实现方案
1. proto 定义文件
直接对应C结构体编写proto规则,使用repeated关键字实现数组效果,无需重复定义10次同类型字段:
// 可根据需求选择proto2或proto3语法,这里以proto3为例 syntax = "proto3"; // 对应原C语言 struct apple message Apple { int32 a = 1; // 匹配C语言int类型 int32 c = 2; // Protobuf无原生char类型,用int32兼容存储char值 } // 对应原C语言 struct b message B { int32 count = 1; repeated Apple a = 2; // repeated关键字表示可存储多个Apple类型元素,替代固定长度数组 }
2. 固定长度10的限制实现
Protobuf的repeated字段默认是可变长度,要实现原C代码中固定10个元素的效果,直接在业务逻辑层加校验即可:
- 序列化写入数据前,校验
a字段的元素数量不超过10,超出则拦截报错 - 反序列化读取数据后,先校验
a字段的元素数量是否符合业务要求,不符合则做异常处理
3. C语言代码生成
安装好protobuf-c依赖后,执行如下命令生成对应的C语言操作代码:
protoc --c_out=. 你的proto文件名.proto
生成的.pb-c.h头文件和.pb-c.c源文件可直接引入你的C工程调用,内部已封装好序列化、反序列化、字段读写的相关接口。
内容的提问来源于stack exchange,提问作者Nidhin Tomy
相关产品推荐
相关产品推荐

