谷歌协议缓冲区中没有小标量类型的原因是什么?
https://developers.google.com/protocol-buffers/docs/proto#scalar
更具体地说,对于C ++,我会在gpb中将uint16_t
转换为两个bytes
吗?我正在考虑将现有的基于消息的协议转换为gpb,这对我来说似乎有点奇怪。
答案 0 :(得分:1)
Gbp使用可变长度编码,这意味着传输整数的大小取决于整数的值。 只使用几个字节就可以发送小的int 以下是指向gbp encoding
的指南的链接特别是,如果你只有一个short int的特定情况(并且不是很多,在这种情况下你可能想要使用bytes
),你应该简单地转换所有{{1} } uint16_t
让varints做的事情。
答案 1 :(得分:1)
Protobuf标量类型编码使用可变数量的字节:
因此,虽然这可能会让您成为精通太空的C编码器,但uint_16t
只会将最多 2个字节用于最低1/4的范围。
PB最终是为了向前兼容而设计的,谷歌知道短的固定数据类型总是太短 :-)(Y2K,IPv4,即将到来的2038 Unix时间等)如果你确实,非常非常紧凑,使用bytes
作为@SRLKilling推荐,代价是需要在它上面编写自己的编解码器。