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
|