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.