Forum: PC-Programmierung Benötige Hilfe beim 'Zerlegen' einer Hex-Kette (STX/ETX in den Daten)


von Michael J. (michael-junge)


Lesenswert?

Hallo zusammen,

ich habe möchte eine Hex-Zeichenkette zerlegen und verstehe hier die 
Beschreibung nicht. Im großen und Ganzen geht es wohl darum dass eine 
Übertragung mit 0x02 beginnt und auf 0x03 endet. Da diese beiden 
Steuerzeichen nicht in der mitte der Datenkette vorkommen dürfen gibt es 
hier eine 'alternative' - und genau diese verstehe ich nicht.
Anbei die Beschreibung:

Each block starts with STX (0x02) and ends with ETX (0x03), as this 
characters may not appear in the middle of the block 0x3F will be used 
as escape character with 1 or 2 following bytes.

Meaning of 0x3f:
byte 0 |byte 1   |byte 2 |description
-------|---------|-------|------------------------------
0x3f   |00xxxxxx |yy     |inserts yy xxxxxx times
0x3f   |01xxxxxx |       |inserts 0x02 xxxxxx times
0x3f   |10xxxxxx |       |inserts 0x03 xxxxxx times
0x3f   |11xxxxxx |       |inserts 0x3f xxxxxx times

Allowed range for xxxxxx: 0x04-0x3f
Do not use this compression under 4 equal bytes.

e.g.:
// 0x3F 0x1f 0x20       means: insert 31 spaces
// 0x3F 0xc1            means: insert 1 0x3F
// 0x3F 0x42            means: insert 2 0x02



Das erste Beispiel ist für mich ja noch verständlich, ich füge in die 
Hex-Kette 31 mal 0x20 ein. Aber bei den anderen beiden komme ich nicht 
mehr mit. Wie komme ich von '0x3F 0xc1' auf '0x3F', bzw. von '0x3F 0x42' 
auf '0x02 0x02'?
Schon bei der Tabelle verstehe ich die Darstellung nicht. z.B. steht bei 
byte1 '00xxxxxx' - was sollen die 6x hinter 00? 00 ist doch schon ein 
byte, '00xxxxxx' wären demnach ja schon 4byte?!

Hoffe es kann mich jemand auf den richtigen Weg bringen :-)
Viele Grüße
Mike

von Dietmar (Gast)


Lesenswert?

Die Spalte unter byte1 ist bitcodiert! Hier wird angegeben welches 
Zeichen einzufügen ist.Bit 6&7. Die bits 0-5 geben die Anzahl an. -> Es 
können also maximal 64 Zeichen eingefügt werden.

Da das 0x3F eine Sonderfunktion hat darfst du ein es nur einfügen wenn 
es danach durch setzten von 11xxxxxx explizit verlangt wird auch 
mehrfach.
Auf diese weise kann man ein beliebiges Zeichen mehrfach wiederholen -> 
simple Datenkompression oder du kannst die Zeichen 0x02&0x03 in dein 
Telegramm einfügen.

Hoffe das hilft dir.

von Fabian O. (xfr)


Lesenswert?

Die Angabe in der Spalte "byte 1" ist binär. Die oberen 2 Bit geben an, 
welches Zeichen eingefügt werden soll, die unteren 6 Bit, wie oft.

von Michael J. (michael-junge)


Lesenswert?

binär codiert - ich stand wohl etwas auf dem Schlauch :-)

vielen Dank!

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.