Filter: 2013-09-23

Kodierung von Ganzzahlen variabler Länge

Die Speicherung von Ganzzahlen kann, je nach Datentypgröße viel Platz auf dem Datenträger oder im Speicher in Anspruch nehmen. Werden aber hauptsächlich kleine Werte erwartet, zum Beispiel bei Deltaeinträgen, ist der Großteil des Wertes nicht belegt. Hier springt diese Art der Kodierung ein und versucht die Werte soweit es geht zu kürzen.

Beispiel (Quellcode): vlq.cpp
Download (Quellcode): vlq.zip

Beschreibung

Die Ganzzahl wird in Teile (meist) gleicher Größe aufgeteilt. Alle oberen Teile die keine Bits gesetzt haben werden nicht in die Ausgabe geschrieben. Alle Teile, bis auf den Letzten, bekommen einen Marker, dass der nachfolgende Teil nicht das Ende darstellt. Häufig werden die Zahlen in 7-Bit Teile gebrochen und mit übrigen Bit des Ausgabebytes markiert.

Ganzzahlspeicherung variabler Länge (LSB->MSB) Ganzzahlspeicherung variabler Länge (MSB->LSB)

Es gibt hier allerdings viele Varianten, die häufigsten Unterscheidungen sind:

  • Richtung
    • höherwertiger Teil zuerst
    • niederwertiger Teil zuerst
  • Position des Markers im Ausgabebyte
  • Vorzeichenbehandlu…