我可以为protobuf中的数字设置最大值吗?

时间:2017-12-03 11:29:01

标签: size protocol-buffers limit options proto3

在protobuf中,我们只能选择使用有符号或无符号的32位或64位整数来限制值的范围。

但是,我想要定义的数据结构包含8位,16位和32位整数的混合,以节省嵌入式设备的空间。在它们上面,数据结构的实现也有所不同,并且需要为某些字段保留特殊值,因此它们的最大数量不是2的幂。

在这些嵌入式设备上,protobuf定义仅用于与它们之间的传输,而不是用于实际存储。所以我可以在阅读时限制数字。

但是,我宁愿在.proto.options文件中定义这些最大值,以确保所有客户端应用程序都知道这些限制。

有没有办法做到这一点?

我知道有字段选项,但列出here的字段选项不包含此选项。可以创建自定义选项,但这似乎需要编写一个编译器扩展,这意味着我必须为我想编译的每种语言手动实现这种限制检查,并且花费的时间比以前节省的时间多。

2 个答案:

答案 0 :(得分:2)

某些第三方实施确实包含此类支持。

例如,我自己的nanopb有int_size option

  

int_size:覆盖字段的整数类型。 (例如使用uint8_t来节省RAM。)

如果值不适合字段,这将在pb_decode()运行时返回错误。

答案 1 :(得分:1)

没有用于表达该意图的语法,也没有用于强制执行您要添加的规则的内置工具/代码生成器。您需要手动处理此问题。