Passa al contenuto principale

Appendice B. Codice Huffman (Huffman Code)

Il seguente codice Huffman viene utilizzato quando si codificano letterali di stringa utilizzando la codifica Huffman. Questa tabella è stata generata utilizzando uno strumento che si trova in https://github.com/nmathewson/hpack-huffman-gen.

La tabella è organizzata come segue:

  • sym: Il simbolo (valore del byte)
  • code as bits: Il codice binario per il simbolo
  • code as hex: La rappresentazione esadecimale del codice
  • len: La lunghezza in bit del codice

Il codice Huffman utilizzato per codificare i letterali di stringa utilizza la seguente tabella:

      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]

Nota: La tabella completa del codice Huffman contiene 257 voci (simboli 0-255 più EOS). A causa di limitazioni di spazio, qui viene mostrata solo una parte. Per la tabella completa, fare riferimento al documento ufficiale RFC 7541 su https://www.rfc-editor.org/rfc/rfc7541.txt.

Il codice Huffman è un codice Huffman canonico con le lunghezze dei codici definite sopra. Per l'efficienza di decodifica, le implementazioni dovrebbero utilizzare un decodificatore basato su tabella o un decodificatore basato su albero ottimizzato per questo codice specifico.

Un simbolo End-of-String (EOS) è incluso nel codice Huffman per consentire la codifica allineata ai bit. Quando la lunghezza in bit della stringa codificata non cade su un confine di ottetto, il simbolo EOS viene utilizzato per riempire la stringa codificata fino al successivo confine di ottetto. Un riempimento di più di 7 bit DEVE essere trattato come un errore di decodifica. Un riempimento che non corrisponde ai bit più significativi di EOS DEVE essere trattato come un errore di decodifica.