32 lines
509 B
Python
32 lines
509 B
Python
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
|