16. Codifica interi a lunghezza variabile
16. Codifica interi a lunghezza variabile
I pacchetti e i frame QUIC utilizzano comunemente una codifica a lunghezza variabile per valori interi non negativi. Questa codifica garantisce che i valori interi più piccoli richiedano meno byte per essere codificati.
La codifica di interi a lunghezza variabile QUIC riserva i due bit più significativi del primo byte per codificare il logaritmo in base 2 della lunghezza di codifica dell'intero in byte. Il valore intero è codificato sui bit rimanenti, in ordine di byte di rete.
Ciò significa che gli interi sono codificati in 1, 2, 4 o 8 byte e possono codificare rispettivamente valori a 6, 14, 30 o 62 bit. La tabella 4 riassume le proprietà di codifica.
| 2Bit | Lunghezza | Bit utilizzabili | Intervallo |
|---|---|---|---|
| 00 | 1 | 6 | 0-63 |
| 01 | 2 | 14 | 0-16383 |
| 10 | 4 | 30 | 0-1073741823 |
| 11 | 8 | 62 | 0-4611686018427387903 |
Tabella 4: Riepilogo delle codifiche di interi
Ad esempio, la sequenza di otto byte 0xc2 0x19 0x7c 0x5e 0xff 0x14 0xe8 0x8c (in esadecimale) si decodifica al valore decimale 151288809941952652; la sequenza di quattro byte 0x9d 0x7f 0x3e 0x7d si decodifica a 494878333; la sequenza di due byte 0x7b 0xbd si decodifica a 15293; e il singolo byte 0x25 si decodifica a 37 (come anche la sequenza di due byte 0x40 0x25).
I valori non devono necessariamente essere codificati nel numero minimo di byte necessari.
Un endpoint PUÒ utilizzare valori più grandi di quelli strettamente necessari per codificare un valore. Ad esempio, una codifica a due byte potrebbe essere utilizzata per codificare valori inferiori a 64.
Le versioni (Sezione 15), i numeri di pacchetto inviati nell'intestazione (Sezione 17.1) e i tipi di frame (Sezione 19) sono tutti descritti usando interi, ma non utilizzano questa codifica.