Annexe B. Code de Huffman (Huffman Code)
Le code de Huffman suivant est utilisé lors de l'encodage de littéraux de chaînes avec un codage de Huffman. Ce tableau a été généré à l'aide d'un outil qui peut être trouvé à https://github.com/nmathewson/hpack-huffman-gen.
Le tableau est organisé comme suit :
- sym : Le symbole (valeur d'octet)
- code as bits : Le code binaire pour le symbole
- code as hex : La représentation hexadécimale du code
- len : La longueur en bits du code
Le code de Huffman utilisé pour encoder les littéraux de chaînes utilise le tableau suivant :
sym code as bits code as hex len
(bits)
( 0) |11111111|11000 1ff8 [13]
( 1) |11111111|11111111|1011000 7fffd8 [23]
( 2) |11111111|11111111|11111110|0010 fffffe2 [28]
( 3) |11111111|11111111|11111110|0011 fffffe3 [28]
( 4) |11111111|11111111|11111110|0100 fffffe4 [28]
( 5) |11111111|11111111|11111110|0101 fffffe5 [28]
( 6) |11111111|11111111|11111110|0110 fffffe6 [28]
( 7) |11111111|11111111|11111110|0111 fffffe7 [28]
( 8) |11111111|11111111|11111110|1000 fffffe8 [28]
( 9) |11111111|11111111|11101010 ffffea [24]
( 10) |11111111|11111111|11111111|111100 3ffffffc [30]
( 11) |11111111|11111111|11111110|1001 fffffe9 [28]
( 12) |11111111|11111111|11111110|1010 fffffea [28]
( 13) |11111111|11111111|11111111|111101 3ffffffd [30]
( 14) |11111111|11111111|11111110|1011 fffffeb [28]
( 15) |11111111|11111111|11111110|1100 fffffec [28]
( 16) |11111111|11111111|11111110|1101 fffffed [28]
( 17) |11111111|11111111|11111110|1110 fffffee [28]
( 18) |11111111|11111111|11111110|1111 fffffef [28]
( 19) |11111111|11111111|11111111|0000 ffffff0 [28]
( 20) |11111111|11111111|11111111|0001 ffffff1 [28]
( 21) |11111111|11111111|11111111|0010 ffffff2 [28]
( 22) |11111111|11111111|11111111|111110 3ffffffe [30]
( 23) |11111111|11111111|11111111|0011 ffffff3 [28]
( 24) |11111111|11111111|11111111|0100 ffffff4 [28]
( 25) |11111111|11111111|11111111|0101 ffffff5 [28]
( 26) |11111111|11111111|11111111|0110 ffffff6 [28]
( 27) |11111111|11111111|11111111|0111 ffffff7 [28]
( 28) |11111111|11111111|11111111|1000 ffffff8 [28]
( 29) |11111111|11111111|11111111|1001 ffffff9 [28]
( 30) |11111111|11111111|11111111|1010 ffffffa [28]
( 31) |11111111|11111111|11111111|1011 ffffffb [28]
' ' ( 32) |010100 14 [ 6]
'!' ( 33) |11111110|00 3f8 [10]
'"' ( 34) |11111110|01 3f9 [10]
'#' ( 35) |11111111|1010 ffa [12]
'$' ( 36) |11111111|11001 1ff9 [13]
Note : Le tableau complet du code de Huffman contient 257 entrées (symboles 0-255 plus EOS). En raison de contraintes d'espace, seule une partie est montrée ici. Pour le tableau complet, veuillez vous référer au document officiel RFC 7541 à
https://www.rfc-editor.org/rfc/rfc7541.txt.
Le code de Huffman est un code de Huffman canonique avec des longueurs de code définies ci-dessus. Pour une efficacité de décodage, les implémentations devraient utiliser un décodeur basé sur des tables ou un décodeur basé sur des arbres optimisé pour ce code spécifique.
Un symbole de fin de chaîne (EOS, End-of-String) est inclus dans le code de Huffman pour permettre un encodage aligné sur les bits. Si la longueur en bits de la chaîne encodée ne tombe pas sur une limite d'octet, le symbole EOS est utilisé pour remplir la chaîne encodée jusqu'à la limite d'octet suivante. Un remplissage de plus de 7 bits DOIT (MUST) être traité comme une erreur de décodage. Un remplissage ne correspondant pas aux bits de poids fort de EOS DOIT (MUST) être traité comme une erreur de décodage.