ULEB128可变长度整数编码

问题描述

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

解决方法

如果我的逻辑是正确的,我的主要问题是D中的字节操作,即如何检查高位或低位。

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