ULEB128 可变长度整数编码

ULEB128 variable-length integer encoding

我正在尝试编写一个 ULEB 128 解析器,它将采用无符号字节数组和 return 所需的值和移位。如果理解正确,如果我有一个 ubyte[] list = [0x1b, 0x02, 0x03] 那么我所做的就是查看 0x1b 并且这里的高位大于 0,所以我必须读取下一个字节。最后它应该return 0x20b 移动2而不包括0x03,因为第二个字节高位是0。如果我的逻辑是正确的,我的主要问题是 D 中的字节操作,即如何检查高位或低位。

If my logic is correct, my main issue is byte manipulation in D i.e. how to check the high or low bits.

就像您在 C 中所做的那样。您可以使用按位与 (&) 和二进制移位 (<<)。 如果您需要一个示例作为参考,druntime 会这样做: https://github.com/dlang/druntime/blob/0dfc0ce5aef1fde00713b56e9be99dcdfb04d171/src/rt/backtrace/dwarf.d#L490-L534