Anhang B. Huffman-Code (Huffman Code)
Der folgende Huffman-Code wird bei der Kodierung von Zeichenketten-Literalen mit Huffman-Kodierung verwendet. Diese Tabelle wurde mit einem Tool generiert, das unter https://github.com/nmathewson/hpack-huffman-gen zu finden ist.
Die Tabelle ist wie folgt organisiert:
- sym: Das Symbol (Byte-Wert)
- code as bits: Der binäre Code für das Symbol
- code as hex: Die hexadezimale Darstellung des Codes
- len: Die Bitlänge des Codes
Der Huffman-Code, der zum Kodieren von Zeichenketten-Literalen verwendet wird, verwendet die folgende Tabelle:
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]
Hinweis: Die vollständige Huffman-Code-Tabelle enthält 257 Einträge (Symbole 0-255 plus EOS). Aufgrund von Platzbeschränkungen wird hier nur ein Teil gezeigt. Für die vollständige Tabelle verweisen Sie bitte auf das offizielle RFC 7541-Dokument unter
https://www.rfc-editor.org/rfc/rfc7541.txt.
Der Huffman-Code ist ein kanonischer Huffman-Code mit oben definierten Codelängen. Für Dekodierungseffizienz sollten Implementierungen einen tabellenbasierten Decoder oder einen baumbasierten Decoder verwenden, der für diesen spezifischen Code optimiert ist.
Ein End-of-String-Symbol (EOS) ist im Huffman-Code enthalten, um eine bitausgerichtete Kodierung zu ermöglichen. Wenn die Bitlänge der kodierten Zeichenkette nicht auf eine Oktettgrenze fällt, wird das EOS-Symbol verwendet, um die kodierte Zeichenkette bis zur nächsten Oktettgrenze aufzufüllen. Eine Auffüllung von mehr als 7 Bits MUSS als Dekodierungsfehler behandelt werden. Eine Auffüllung, die nicht den höchstwertigen Bits von EOS entspricht, MUSS als Dekodierungsfehler behandelt werden.