Skip to main content

Appendix B. Huffman Code

The following Huffman code is used when encoding string literals with Huffman coding. This table has been generated using a tool that can be found at ````https://github.com/nmathewson/hpack-huffman-gen\````.

The table is organized as follows:

  • sym: The symbol (byte value)
  • code as bits: The binary code for the symbol
  • code as hex: The hexadecimal representation of the code
  • len: The bit length of the code

The Huffman code used for encoding string literals uses the following table:

      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: The complete Huffman code table contains 257 entries (symbols 0-255 plus EOS). Due to space constraints, only a portion is shown here. For the complete table, please refer to the official RFC 7541 document at ````https://www.rfc-editor.org/rfc/rfc7541.txt\````.

The Huffman code is a canonical Huffman code with code lengths defined above. For decoding efficiency, implementations should use a table-based decoder or a tree-based decoder optimized for this specific code.

An End-of-String (EOS) symbol is included in the Huffman code to enable bit-aligned encoding. If the bit length of the encoded string does not fall on an octet boundary, the EOS symbol is used to pad the encoded string to the next octet boundary. Padding longer than 7 bits MUST be treated as a decoding error. A padding strictly longer than 7 bits MUST be treated as a decoding error. A padding not corresponding to the most-significant bits of EOS MUST be treated as a decoding error.