Aller au contenu principal

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.