iFr*_*cht 5 size limit protocol-buffers proto3
在protobuf中,我们只能选择使用有符号或无符号的32位或64位整数来限制值的范围。
然而,我想要定义的数据结构包含 8 位、16 位和 32 位整数的混合,以节省嵌入式设备上的空间。在它们上,数据结构的实现也有些不同,并且需要为某些字段保留特殊值,因此它们的最大数量不是 2 的幂。
在这些嵌入式设备上,protobuf 定义仅用于与它们之间的传输,而不用于实际存储。所以我可以在读入它们时限制数字。
但是,我宁愿在.proto或.options文件中定义这些最大值,以确保所有客户端应用程序都了解这些限制。
有没有办法做到这一点?
我知道有字段选项,但此处列出的选项不包含此选项。可以创建自定义选项,但这似乎需要编写编译器扩展,这意味着我必须为我想要编译的每种语言手动实现此限制检查,而这会花费比节省的时间更多的时间。
默认情况下,这在 protobuf 中是不可能的,并且规范不包含强制执行此类限制的语法。
然而,一些第三方实现确实包含此类支持。
例如,我自己的nanopb有以下int_size选项:
int_size:覆盖字段的整数类型。(例如使用 uint8_t 来节省 RAM。)
pb_decode()如果该值不适合该字段,这将在运行时返回错误。
| 归档时间: |
|
| 查看次数: |
7362 次 |
| 最近记录: |