解析 Varint

最近遇到类似于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
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值