我正在尝试制作一个新的二进制编码包,因为标准的 Go 编码/二进制包并不完全符合我的要求。
我不明白的是为什么编码/二进制使用x >>= 7inbinary.PutUvarint而不是x >>= 8. 如果我理解正确,这是故意将位移动 7 而不是 8,这导致存储 uint64 的总大小为 80 位,而不是 64 位,这显然是所需的位数。为什么?这是什么原因?这一定与它生成可变长度字节片这一事实有关,但为什么 >>7 会对此有所帮助?
以下是二进制编码函数供您参考:
func PutUvarint(buf []byte, x uint64) int {
i := 0
for x >= 0x80 {
buf[i] = byte(x) | 0x80
x >>= 7
i++
}
buf[i] = byte(x)
return i + 1
}
繁星点点滴滴
相关分类