protobuf

编码

Base 128 Variant

这是一种基于 7 bit(即 128)的变字节长度的编码。

  • 小端存储(least significant group first)。
  • 最高有效位( most significant bit,MSB):1 表示下一个字节也用来表示该数,0 表示这是该数的最后一个字节。

Message Structure

protocol buffer 消息一个 key-value 对的序列。一条消息的二进制形式仅仅使用 field_number 作为 key ,而 field 的 name 和 声明的 type 能且仅能通过解码端引用该消息的定义(例如 .proto 文件)得到。

  • key-value :二进制字节流编码表示为 “key-value-key-value-…” 。
  • “field_number - wire_type” 表示法:
    二进制消息流中每一个 key 是值为 (field_number << 3) | wire_type 的 Variant,也就是说 key 的最后 3 个 bit 存储 wire_type 。

其中,wire_type 如下:

TypeMeaningUsed For
0Varintint32, int64, uint32, uint64, sint32, sint64, bool, enum
164-bitfixed64, sfixed64, double
2Length-delimitedstring, bytes, embedded messages, packed repeated fields
3Start groupgroups (deprecated)
4End groupgroups (deprecated)
532-bitfixed32, sfixed32, float

message.h

反射(Reflection)

descriptor.h

参考

[1] protobuf 官网:Protocols Buffers Encoding.
[2] protobuf 官网:proto3 assigning_field_numbers.
[3] 博客 Varint.
[4] 官网 message.h.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值