解析 Varint

本文介绍了如何解析类似于Protobuf格式文件中的Varint编码。通过理解Varint利用字节最高位判断是否继续读取的原理,以及从后向前取7个bit位的方法,展示了C++和C#的代码实现。

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

最近遇到类似于Protobuf的格式的文件。于是根据同事给的分析思路自己写了一套解析的代码,这里只展示怎么解析VarInt;

1> 1 byte = 8 bits,

var bt = 0b_1111_0000

Varint是根据字节的最高位来判断是否读取下一个字节,11110000最高位是1(最左边是最高位),所以这里还要往下读取一个字节,直到读取到最高位是0的字节的位置,然后取从开始到最高位是0的这个字节,每个字节只取7个bit位,然后从后面的字节开始读取,这样就可以了。

2> 给个字节数组,来尝试一下:

var bs = new byte[] { 0xF0, 0x81, 0x88, 0x10 };

写的更加容易理解一点:

var bs = new byte[] { 0b_1111_0000, 0b_1000_0001, 0b1000_1000, 0b_0001_0000 };

前3个字节的最高位都是1,所以读到第4个结束,

那么只取这个4个字节的7个bit位就是

var bt = 0b 1110000 0000001 0001000 0010000;

因为是从后面读取的,这里需要颠倒一下顺序

var bt = 0b 0010000 0001000 0000001 1110000; //336
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值