Implementa la codifica e la decodifica a lunghezza variabile.
L'obiettivo di questo esercizio è implementare la codifica e la decodifica VLQ.
In breve, l'obiettivo di questa codifica è codificare valori interi in modo da risparmiare byte. Solo i primi 7 bit di ogni byte sono significativi (allineati a destra; un po' come in un byte ASCII). Quindi, se hai un valore a 32 bit, devi scompattarlo in una serie di byte da 7 bit. Naturalmente, il numero di byte varia a seconda dell'intero. Per indicare qual è l'ultimo byte della serie, lasci il bit #7 a 0. In tutti i byte precedenti, imposti a 1 il bit #7.
Quindi, se un intero è compreso tra 0-127, può essere rappresentato con un solo byte.
Anche se VLQ può gestire numeri di dimensioni arbitrarie, in questo esercizio ci limiteremo ai soli numeri che rientrano in un intero senza segno a 32 bit.
Ecco alcuni esempi di interi come valori a 32 bit, e la codifica a lunghezza variabile a cui corrispondono:
NUMBER VARIABLE QUANTITY
00000000 00
00000040 40
0000007F 7F
00000080 81 00
00002000 C0 00
00003FFF FF 7F
00004000 81 80 00
00100000 C0 80 00
001FFFFF FF FF 7F
00200000 81 80 80 00
08000000 C0 80 80 00
0FFFFFFF FF FF FF 7F
Il buffer per i dati di input usa i byte da 64 a 191 della memoria lineare.
Iscriviti a Exercism per imparare e padroneggiare WebAssembly con 87 esercizi e il mentoring di persone reali, tutto gratis.