A tool to encode/decode arbitrary unsigned integers using predefined-length chunk of bits.
npm install @hookun/vlq


A tool to encode/decode arbitrary unsigned integers using predefined-length chunk of bits.
``javascript`
import {encodeToArrayBuffer, decodeToArray} from '@hookhookun/vlq';
const data = [1, 2, 3, 4];
const encoded1 = encodeToArrayBuffer(data, 1);
console.info(Buffer.from(encoded1).toString('hex'));
// 073788
console.info(Buffer.from(encoded1).toString('base64url'));
// BzeI
console.info(decodeToArray(encoded1));
// [ 1, 2, 3, 4 ]
const encoded2 = encodeToArrayBuffer(data, 2);
console.info(Buffer.from(encoded1).toString('hex'));
// 129d10
console.info(Buffer.from(encoded1).toString('base64url'));
// Ep0Q
console.info(decodeToArray(encoded1));
// [ 1, 2, 3, 4 ]
``
npm install @hookun/vlq
``
Encoded = ChunkSize -> Data -> EndOfChunks
ChunkSize = Value(3,C-1)
Data = *Value(C,x)
EndOfChunks = SB(C,0)
Value(n,x) = *SB(n,x1) -> LSB(n,x0)
SB(n,x) = 1xxxxxxxxxxx
| <- n -> |
LSB(n,y) = 0yyyyyyyyyyy
The binary representation of ChunkSize is 1 less than the actual value.
Assume that ChunkSize is 1.
| x| Value(1,x)|00
|----:|----------------:|
| 0| |01
| 1| |11 00
| 2| |11 01
| 3| |11 10 00
| 4| |11 10 01
| 5| |11 10 10 00
| 8| |11 10 10 10 00
| 16| |10
| EOC| |
Assume that ChunkSize is 2.
| x| Value(2,x)|000
|----:|----------------:|
| 0| |001
| 1| |010
| 2| |011
| 3| |101 000
| 4| |101 001
| 5| |110 000
| 8| |101 100 000
| 16| |110 100 000
| 32| |101 100 100 000
| 64||100
| EOC| |
Assume that ChunkSize is 3.
| x| Value(3,x)|0000
|----:|---------------:|
| 0| |0001
| 1| |0010
| 2| |0011
| 3| |0100
| 4| |1001 0000
| 8| |1010 0000
| 16| |1100 0000
| 32| |1001 1000 0000
| 64||1000
| EOC| |
Assume that Data is [1, 2, 3, 4] ChunkSize is 1.
``
EndOfChunks = 10
Data = 01 11 00 11 01 11 10 00
ChunkSize = 0000
Encoded = 0000 01 11 00 11 01 11 10 00 10
= ChunkSize -> Data -> EndOfChunks
= 0000011100110111100010
= 0000 0111 0011 0111 1000 10(00)
= 0 7 3 7 8 8
= 0x073788
Assume that Data is [1, 2, 3, 4] ChunkSize is 2.
``
EndOfChunks = 100
Data = 001 010 011 101 000
ChunkSize = 0001
Encoded = 0001 001 010 011 101 000 100
= ChunkSize -> Data -> EndOfChunks
= 0001001010011101000100
= 0001 0010 1001 1101 0001 00(00)
= 1 2 9 d 1 0
= 0x129d10
``
Encoded = 5 1 4 5 0 f 2 8 8 0
= 0101000101000101000011110010100010000000
^^^^| <- Data -> |ChunkSize
Since is 5, divide Data into (5+offset+flag bit)=(5+1+1)=7 bits each.
```
Data = 0001010 0010100 0011110 0101000 1000000 0
= 10 20 30 40 EOC
= [10, 20, 30, 40]