Variable-length quantity
func vlq_encode(num) {
var t = (0x7F & num)
var str = t.chr
while (num >>= 7) {
t = (0x7F & num)
str += chr(0x80 | t)
}
str.reverse
}
func vlq_decode(str) {
var num = ''
str.each_byte { |b|
num += ('%07b' % (b & 0x7F))
}
Num(num, 2)
}
var tests = [0, 0xa, 123, 254, 255, 256,
257, 65534, 65535, 65536, 65537, 0x1fffff,
0x200000]
tests.each { |t|
var vlq = vlq_encode(t)
printf("%8s %12s %8s\n", t,
vlq.bytes.join(':', { "%02X" % _ }), vlq_decode(vlq))
}Output:
Last updated
Was this helpful?