问题描述
我正在尝试编写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