Längenbytes?

Status
Nicht offen für weitere Antworten.

pinerski

Mitglied
Hallo,

Hab eine Verständnisfrage. Und zwar verstehe ich nicht was im folgender Aufgabe mit Längenbyte gemeint ist und wie die Lauflänge bestimmt wird.

Bei unserer RLE-Variante folgen wir grob dem im PCX-Dateiformat verwendeten Verfahren: Längenbytes werden daran erkannt, dass ihre beiden höchsten Bits gesetzt sind. Mit den restlichen Bits wird die Lauflänge minus eins angegeben, so dass die maximal mögliche Länge 64 Bytes beträgt. Einzelne Datenbytes können direkt angegeben werden. Lediglich wenn ihr Wert 192 oder darüber beträgt, müssen sie mit einem vorangehenden Längenbyte mit dem Wert 192 aufgeführt werden, da sie sonst selbst als Längenbyte interpretiert würden.

Hier ist mal ein Auszug aus der pcx Datei.

FF FF CF FF C2 F7 C0 FF C3 F7 C1 FF C9 F7 C3 FF
C0 F7 C2 FF C3 F7 C1 FF C3 FE FF F6 C2 F6 CA FF
C1 F7 C1 F6 C8 EE C0 F7 C2 F6 C2 F7 C0 F6 C0 FF
C3 F7 C1 FF C1 F7 C0 FF C2 F7 C1 FF CF F7 FF FF

Das Verfahren RLE habe ich verstanden, ebenso wie, was eine pcx Datei ist.
Jedoch verstehe ich nicht, wie ich die Längenbytes entschlüssele.

So wie ich das bis jetzt verstanden habe fängt ein neues Längenbyte an bei jedem FF FF.

Bin für jede Hilfe dankbar.
 

Marco13

Top Contributor
Ohne jetzt bei wotsit.org und Co nach einer genauen Definition gesucht zu haben: Ich nehme bei dem Stichwort "Lauflängencodierung" mal an, dass die "Längenbytes" eben genau angeben, wie oft die nachfolgenden bytes wiederholt werden...?! Kann das passen?
 

sayang

Aktives Mitglied
So wie ich das bis jetzt verstanden habe fängt ein neues Längenbyte an bei jedem FF FF.

Ein Byte sind 8 Bit und wird in Hexadezimal-Schreibweise durch 2 Zeichen aus dem Alphabet {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F} dargestellt.

z. B. FF = 11111111
oder CE = 11001110
oder 0A = 00001010

Das höchste Bit ist dann das erste in der binären Schreibweise, also 1 bei FF, 1 bei CE und 0 bei 0A.

Das Längenbyte "fängt" also nicht bei jeden FF an, sondern FF ist eines der möglichen Längenbytes.

Lg
sayang
 

pinerski

Mitglied
Also wenn ich ein FF habe -> (Dezimal) 255

255-> 11111111 (ist ein Längenbyte)
111111 Rest gibt dann die Länge an also 63?
Warum ist die dann die Maximal möbliche länge 64 byte?
 

faetzminator

Gesperrter Benutzer
Du musst zum Wert eins addieren. Ich denke, dies ist so, weil die Länge 0 nicht benötigt wird. Also ist 10000000 = 1 und 11111111 = 64
 

pinerski

Mitglied
Okay, dann habe ich also im Beispiel oben ein FF.

Das ist dann ein Längenbyte mit der länge 64 byte.

Einzelne Datenbytes können direkt angegeben werden. Lediglich wenn ihr Wert 192 oder darüber beträgt, müssen sie mit einem vorangehenden Längenbyte mit dem Wert 192 aufgeführt werden, da sie sonst selbst als Längenbyte interpretiert würden.

Was bedeutet dann jetzt mein nächster Wert FF?
 

pinerski

Mitglied
FF FF CF FF C2 F7 C0 FF C3 F7 C1 FF C9 F7 C3 FF
C0 F7 C2 FF C3 F7 C1 FF C3 FE FF F6 C2 F6 CA FF
C1 F7 C1 F6 C8 EE C0 F7 C2 F6 C2 F7 C0 F6 C0 FF
C3 F7 C1 FF C1 F7 C0 FF C2 F7 C1 FF CF F7 FF FF

Habe das mal in Dezimal umgewandelt vielleicht hilft das weiter.

255 255 207 255 194 247 192 255 195 247 193 255 201 247 195 255
192 247 194 255 195 247 193 255 195 254 255 246 194 246 202 255
193 247 193 246 200 238 192 247 194 246 194 247 192 246 192 255
195 247 193 255 193 247 192 255 194 247 193 255 207 247 255 255
 

pinerski

Mitglied
hier auch noch in binär:

11111111 11111111 11001111 11111111 11000010 11110111 11000000 11111111 11000011 11110111 11000001 11111111 11001001 11110111 11000011 11111111
11000000 11110111 11000010 11111111 11000011 11110111 11000001 11111111 11000011 11111110 11111111 11110110 11000010 11110110 11001010 11111111
11000001 11110111 11000001 11110110 11001000 11101110 11000000 11110111 11000010 11110110 11000010 11110111 11000000 11110110 11000000 11111111
11000011 11110111 11000001 11111111 11000001 11110111 11000000 11111111 11000010 11110111 11000001 11111111 11001111 11110111 11111111 11111111
 

pinerski

Mitglied
Kann es sein das folgende Zahlenfolge

255 255 207 255 194 247 192 255 ->
11111111 11111111 11001111 11111111 11000010 11110111 11000000 11111111

so zu interpretieren ist

64 * 255
16 * 255
3 * 247
1 * 255

?
 
Zuletzt bearbeitet:

Marco13

Top Contributor
Spontan würde ich sagen, dass das bedeutet, dass das ganze mit "64 mal das byte 255" anfängt.... Wenn sonst nichts dazu gesagt wurde. (Es wurde aber mehr dazu gesagt).

EDIT: Was deine letzte Frage mit einem "Ja, das kann sein" beantwortet ;)
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Oben