Zum Hauptinhalt springen

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.