16. Codage d'entiers à longueur variable
16. Codage d'entiers à longueur variable
Les paquets et trames QUIC utilisent couramment un codage à longueur variable pour les valeurs entières non négatives. Ce codage garantit que les valeurs entières plus petites nécessitent moins d'octets pour être codées.
Le codage d'entiers à longueur variable QUIC réserve les deux bits les plus significatifs du premier octet pour coder le logarithme en base 2 de la longueur de codage de l'entier en octets. La valeur entière est codée sur les bits restants, dans l'ordre des octets réseau.
Cela signifie que les entiers sont codés en 1, 2, 4 ou 8 octets et peuvent coder respectivement des valeurs de 6, 14, 30 ou 62 bits. Le tableau 4 résume les propriétés de codage.
| 2Bit | Longueur | Bits utilisables | Plage |
|---|---|---|---|
| 00 | 1 | 6 | 0-63 |
| 01 | 2 | 14 | 0-16383 |
| 10 | 4 | 30 | 0-1073741823 |
| 11 | 8 | 62 | 0-4611686018427387903 |
Tableau 4: Résumé des codages d'entiers
Par exemple, la séquence de huit octets 0xc2 0x19 0x7c 0x5e 0xff 0x14 0xe8 0x8c (en hexadécimal) se décode en la valeur décimale 151288809941952652; la séquence de quatre octets 0x9d 0x7f 0x3e 0x7d se décode en 494878333; la séquence de deux octets 0x7b 0xbd se décode en 15293; et l'octet unique 0x25 se décode en 37 (tout comme la séquence de deux octets 0x40 0x25).
Les valeurs n'ont pas besoin d'être codées avec le nombre minimal d'octets nécessaires.
Un point de terminaison PEUT utiliser des valeurs plus grandes que strictement nécessaire pour coder une valeur. Par exemple, un codage de deux octets pourrait être utilisé pour coder des valeurs inférieures à 64.
Les versions (Section 15), les numéros de paquet envoyés dans l'en-tête (Section 17.1) et les types de trames (Section 19) sont tous décrits à l'aide d'entiers, mais n'utilisent pas ce codage.