答案 0 :(得分:0)
VLC(可变长度编码)代表正在使用的可变比特量。因此,在您的示例中,当前值包含1到19位。
这一开始可能会让人感到困惑,但它遵循严格的逻辑。 附录中肯定会有一个表,用于定义哪个位组合代表什么值。
每个值由特定 - 唯一 - 位组合表示,该组合可由串行读取位确定。
例如此表:
0xxxxxxxxxxxxxxxxxx = value = 0 ( 1 bit length )
10xxxxxxxxxxxxxxxxx = value = 1 ( 2 bit length )
110xxxxxxxxxxxxxxxx = value = 2 ( 3 bit length )
1110xxxxxxxxxxxxxxx = value = 3 ( 4 bit length )
...
1111111111111111110 = value = 18 ( 19 bit length )
在此示例中,0
表示值的结尾,它与1
一起编码VLC值。如上所述,您必须按顺序读取比特流以获得值的长度,因此在此示例中,您必须检查尾随0
。
实际上,这些表通常由Huffman Coding构成,因此比本例中的更复杂。您一定会在上述规范的附录中找到您的翻译表。
如何判断我应该为hcod_sf读取多少位?
您只能通过读取它们来确定要读取的位数。实际上,您一次读取(至少19个)位,然后评估这些位中有多少属于该值(通常使用表)。
1..19代表什么?
它代表此特定值中的最小(1)和最大(19)位数。
<强>最后:强>
实现这一点非常棘手,因此了解BMI instruction set extension对x86处理此方法非常有帮助。