我正在使用我自己的webAssembly JS中的一个bug来编译。我不确定我的尺寸格式是否正确以及限制是什么
例如,127字节的数据段
00 41 00 0b 7f ...data
^^ size 127 bytes
然后用128字节
00 41 00 0b 8001 ...data
^^^^ size 128
我猜测高位如果打开则表示后面会有一个字节。这意味着下一步将是
00 41 00 0b ff7f ...data
^^^^ size 16383
00 41 00 0b 808001 ...data
^^^^^^ size 16384
所以长度是nibit顺序(3字节6 nibits)103254
,nibits 1和3的顶部位设置为查看位S1110000 S3332222 A5554444
,其中S始终打开,A总是off和数字代表nibit位顺序。
这是正确的,可以用这种格式表示的最大值是什么?
这是唯一的尺寸格式吗?
是否有一种标准算法可以将表示长度的Javascript数字转换为此格式,因为目前我的解决方案非常难以解决?
答案 0 :(得分:2)
Wasm二进制格式对所有整数使用LEB128格式。在大小特别unsigned LEB128的情况下。但是,与一般的LEB128不同,Wasm施加了最大长度,请参阅the specification。
您可以在网上找到大量LEB128编码/解码的示例实现,例如,它是Wasm reference interpreter(在OCaml中)的3行函数。