File size: 509 Bytes
08c964e
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
import struct


# varint编码 -> bytes
def _varint_encode(num):
    res = b''

    while num > 127:
        res += struct.pack('B', 0x80 | (num & 0x7f))
        num >>= 7

    res += struct.pack('B', num)

    return res


# varint解码 -> num, length
def _varint_decode(bs):
    res = 0
    n = 0
    for shift in range(0, 64, 7):
        if n > len(bs) - 1:
            break

        res |= (bs[n] & 0x7f) << shift
        if (bs[n] & 0x80) == 0:
            break

        n += 1

    return res, n + 1