为什么 3 的 0x83 0x00 格式正确编码为 Wasm 中的 u8?

Why is `0x83 0x00` well-formed encoding of 3 as a u8 in Wasm?

(来源:http://webassembly.github.io/spec/core/binary/values.html#integers

根据我对规范的理解,对于u8,值3应该被编码为0x03。 (满足"if n < 27 ∧ n < 2N"的条件)

对了,下一段是这样说的:

u和s编码的非终结字节产生式中的附加条件N>7限制了编码的长度。但是,在这些范围内仍然允许使用“尾随零”。例如,0x03 和 0x83 0x00 都是值 3 作为 u8 的格式正确的编码。

我通过第二个方程得到 0x83 0x00,但这是针对 "if n ≥ 27 ∧ N < 7" 的情况。对于值 3,它不满足 "n ≥ 27" 的条件 0x83 0x00 在这种情况下如何成为格式正确的编码?

您可能对规范的理解有误。它指定 解码,而不是 编码。所以例子中,n不是数值3,而是字节值0x83。 3 应等于右侧公式“2^7 * m + (n - 2^7)”。出现这种情况是因为 m(第二个字节的值)将为 0。