标签: varint

给定一个整数,它的varint编码有多大?

我有一个python整数列表,我想知道当编码为协议缓冲区可变长度整数或varints序列时,它将占用多少空间。在不实际编码整数的情况下解决此问题的最佳方法是什么?

my_numbers = [20, 69, 500, 38987982344444, 420, 99, 1, 999]
e = MyCoolVarintArrayEncoder(my_numbers)
print(len(e))  # ???
Run Code Online (Sandbox Code Playgroud)

python encoding protocol-buffers varint

5
推荐指数
1
解决办法
345
查看次数

如何在 Go 中编写 LEB128

你如何在 Go 中将整数写入 LEB128 格式?我正在尝试将 int32 编码为Minecraft VarInt,到目前为止我已经尝试将 wiki 上的示例导入到 Go。我在测试时得到了错误的结果,wiki 说 -1 应该等于 [255 255 255 255 15],但我得到的是 [255 255 255 255 255]。我在这里做错了什么?

func WriteVarInt2(v int32) []byte{
   var out []byte
   c := 0
   for{
       currentByte := byte(v & 0b01111111)
       v >>= 7
       if v != 0 {
           currentByte |= 0b10000000
       }
       out = append(out, currentByte)
       c++

       if c >= 5 || v == 0{
           return out
       }
    }
}
Run Code Online (Sandbox Code Playgroud)

binary go varint

5
推荐指数
1
解决办法
176
查看次数

计算前导/尾随 1/0 的效率有什么不同吗?

我正在设计一个带前缀的可变长度整数。

Rust 有计算前导和尾随 1 和 0 的方法:https : //doc.rust-lang.org/std/primitive.u64.html#method.leading_zeros

这些方法在 x86_64、arm32 和 arm64 上的效率有什么不同吗?

例如,如果计算尾随的 1 比尾随的零更快,我将使用 xxxx0111 而不是 xxxx1000 作为长度编码字节(在本例中,对于后面的三个字节)。

arm bit-manipulation x86-64 rust varint

1
推荐指数
1
解决办法
330
查看次数