RLE0 kodierung



  • hola leute

    weiß jemand wie die RLE0 kodierung funktioniert ?
    irgendwie scheint man da nicht-null sequenzen um 1 zu erhoehen oder so.

    weiß da jemand was ?

    Meep Meep



  • Mal schauen, ob ichs auf Anhieb zusammenkrieg:

    Die "normale" RLE-Kodierung speichert ja das zu kodierende Zeichen plus der Zahl, wie oft dieses Zeichen hintereinander vorkommt. Bei der RLE0-Kodierung wird nur noch die 0 kodiert, d. h. es werden nur noch Ketten von Nullen kodiert. Das sieht dann in Pseudocode etwa so aus:

    for(Zeichen in Input)
        if(Zeichen > 0)
            output << (Zeichen + 1)    // + 1, damit eine 1 eindeutig als Kodierung identifiziert werden kann
        else
            l = Anzahl der hintereinander stehenden Nullen
            output << binäre Darstellung von l+1 ohne das höchstwertige Bit
    

    Das "binäre Darstellung von l+1 ohne das höchstwertige Bit" bedeutet folgendes:

    Zahl    Kodierung
       1            0
       2            1
       3           00
       4           01
       5           10
       6           11
       7          000
      10          011
    usw.
    

    Ich hoffe, das war verständlich.



  • hola

    also irgendwie versteh ich das ueberhaupt nicht.
    was ist wenn mein zeichen, weil es aus einer binaerdatei kommt, den wert 255 hat.
    255 + 1 wuerde ja dann 0 ergeben.
    und das mit der binaerdarstellung ohne hoechstwertiges bit raff ich auch nicht.
    kannst das nochmal irgendwie naeher erklaeren ?

    Meep Meep



  • Meep Meep schrieb:

    was ist wenn mein zeichen, weil es aus einer binaerdatei kommt, den wert 255 hat.
    255 + 1 wuerde ja dann 0 ergeben.

    Der Output einer RLE0-Kodierung ist nicht mehr zwingend in Bytes unterteilt, d. h. es kann auch der Wert 256 gespeichert werden.

    und das mit der binaerdarstellung ohne hoechstwertiges bit raff ich auch nicht.
    kannst das nochmal irgendwie naeher erklaeren ?

    Aaalso:

    1: 1 + 1 = 10, erste Stelle weg => 0
    2: 10 + 1 = 11, erste Stelle weg => 1
    3: 11 + 1 = 100, erste Stelle weg => 00
    4: 100 + 1 = 101, erste Stelle weg => 01
    etc.



  • re

    wie kann man den wert 256 in einem byte speichern ? oder speichert man das dann in 16 Bit ab ? aber dann wird die sache auch wieder groesser.

    wie du das mit der minaerdarstellung gerechnet hast, hab ich grad noch verstanden.
    aber wo speichert man dann jeweils das ergebnis ab ?
    da steh ich voll am schlauch.

    angenommen ich habe folgenden string (in den eckigen klammern bedeutet 1 byte groß

    [3][15][15][15][27][0][12][0][0][0][0][1][1]    // 13 byte
    

    wie wuerde das dann mit RLE0 nach der kodierung aussehen ?
    und wie verwandelt man da dann den string wieder zurueck ?

    waere echt fein wenn da mir das zeigen koenntest.

    Meep Meep



  • Meep Meep schrieb:

    wie kann man den wert 256 in einem byte speichern ? oder speichert man das dann in 16 Bit ab ? aber dann wird die sache auch wieder groesser.

    Du kannst eine Escape-Sequenz speichern, die darauf hindeutet, dass die nächsten n Bits noch zu dem aktuellen Zeichen gehören. Zum Beispiel kann 1111 1111 eine Escape-Sequenz sein, die sagt, dass das nächste Bit entscheidet, ob der gespeicherte Wert 255 oder 256 ist.

    aber wo speichert man dann jeweils das ergebnis ab ?
    da steh ich voll am schlauch.

    Einfach in die Zeichenkette rein.

    angenommen ich habe folgenden string (in den eckigen klammern bedeutet 1 byte groß

    [3][15][15][15][27][0][12][0][0][0][0][1][1]    // 13 byte
    

    wie wuerde das dann mit RLE0 nach der kodierung aussehen ?

    [4][16][16][16][28][0][13][0][1][2][2] // 11 Byte

    und wie verwandelt man da dann den string wieder zurueck ?

    Indem man 1 subtrahiert, wenn der der Wert größer als 1 (und keine Escape-Sequenz) ist, ansonsten errechnet man die Anzahl der ersetzten Nullen rückwärts (1 vor die Binärdarstellung klatschen, 1 subtrahieren).

    waere echt fein wenn da mir das zeigen koenntest.

    Meep Meep[/quote]


Anmelden zum Antworten