google的Base 128 Varints编码

本文介绍了Protobuf中的一种变长编码方式,并通过实例详细解释了如何解码该编码方式得到原始数值。此编码适用于网络数据传输,尤其适合用于头部信息的编码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

因为在读netty源码的时候涉及到了这种编码方式,所以就需要去了解一下。。。它是在protobuf里面的数字编码方式

其官方文档地址:https://developers.google.com/protocol-buffers/docs/encoding#varints


想要将它写一下是觉得这种编码方式在网络数据传输中确实挺有用的。。。

直接来将数据的decode吧,encode其实逆向一下也就出来了。。。

数据:10101011  01100001

上述是通过编码了之后的二进制数据,总共16位,2个字节。。。

(1)从前面的一个字节说起吧:10101011  最开始的位是1,那么它表示这个字节以后还有后续的字节。。。然后将最前面的1去掉,还剩下 0101011

(2)接下来看后面的一个字节:01100001  最开始的位是0,那么表示这个字节是最后一个字节了,以后没有更多的字节,那么去掉这个0之后还剩下 1100001


那么最后上面的二进制变成了 0101011   1100001  

然后首位顺序还需要颠倒一下,那么变成了1100001  0101011,用10进制来表示的话就是  12459


这算是一种变长的编码方式了,如果用它来编码头部,用于表示后续字节数的话确实可以方便按字节来读取网络数据。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值