给定一个整数,它的 varint 编码有多大?
Given an integer, how big is its varint encoding?
我有一个 python 整数列表,我想知道当编码为 Protocol Buffers 可变长度整数序列时它将占用多少 space,或者 varints。在不对整数进行实际编码的情况下解决这个问题的最佳方法是什么?
my_numbers = [20, 69, 500, 38987982344444, 420, 99, 1, 999]
e = MyCoolVarintArrayEncoder(my_numbers)
print(len(e)) # ???
每个整数都以 128 为基数编码,每个 "digit" 一个字节。整数值在任何基数中的表示长度为 ceil(log(value, base)).
对每个整数取log(base=128);将这些值四舍五入到最接近的整数;对这些四舍五入的值求和,就是你的长度。
我有一个 python 整数列表,我想知道当编码为 Protocol Buffers 可变长度整数序列时它将占用多少 space,或者 varints。在不对整数进行实际编码的情况下解决这个问题的最佳方法是什么?
my_numbers = [20, 69, 500, 38987982344444, 420, 99, 1, 999]
e = MyCoolVarintArrayEncoder(my_numbers)
print(len(e)) # ???
每个整数都以 128 为基数编码,每个 "digit" 一个字节。整数值在任何基数中的表示长度为 ceil(log(value, base)).
对每个整数取log(base=128);将这些值四舍五入到最接近的整数;对这些四舍五入的值求和,就是你的长度。