如何解决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
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。