mikrocontroller.net

Forum: PC-Programmierung Hexcode Interpretation


Autor: finalcu (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Zusammen,

ich habe mehrere Hexcodes unterschiedlicher Länge und weiss welche 
Informationen die beinhalten, ein paar davon sind z.b:

1000570010000000d00703d007000000
1000570020000000d00703d007000000
0d003e0001d00700d00703d007
0d003e0000d00700d00703d007
10005e001c000000d00728000000d007
10005e001b000000d00728000000d007
10006400a4194800d00700470001d007
1000560020000000d00703d007000000
16006400A4194800660028000000d007002700002900
160064008c194800660028000000d007002700002900

alle Informationen sind in den Bytes vor dem Byte "d0" enthalten. Die 
letzten acht Bytes (inlusive "d0) weiss ich nicht wofür sie stehen. Kann 
es sein, dass dies eine Art checksum ist oder sowas? Hat jemand damit 
Erfahrung oder vielleicht eine Idee?

Gruss,
finalcu

Autor: Magnetus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Woher hast du das Zeuch? (wozu gehört es?)

Autor: Falk Willberg (dl3daz) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
finalcu schrieb:
> Hallo Zusammen,
>
> ich habe mehrere Hexcodes

Woher?

> 1000570010000000d00703d007000000
...
> 0d003e0001d00700d00703d007
...
> 16006400A4194800660028000000d007002700002900

Das erste Byte könnte die Länge sein.

> alle Informationen sind in den Bytes vor dem Byte "d0" enthalten. Die
> letzten acht Bytes (inlusive "d0) weiss ich nicht wofür sie stehen. Kann
> es sein, dass dies eine Art checksum ist oder sowas? Hat jemand damit

Addiere doch mal die Datenbytes, ob das letzte Byte herauskommt..

> Erfahrung oder vielleicht eine Idee?

Sieht aus wie verkrüppelter Intel Hex-code.

Falk

Autor: finalcu (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja das erste Byte ist die Länge - wie bereits gesagt, bis zum Byte "d0" 
weiss ich was die Bytes darstellen.

Die Hexcodes werden von einer russischen Simulationssoftware für die 
Steuerung verwendet.

Ein Beispiel:

10005e001c000000d00728000000d007 beinhaltet folgende Informationen:

- 10 00 ist die Länge (Bytes sind in umgekehrter Reihenfolge), also 16 
Bytes
- 5e 00 ist der Steuerungsbefehl, also Befehl-Nr. 94
- 1c 00 00 00 ist ein Parameter, also 28

mit diesem Befehl setzt man eine Spannung auf 28 V. Die Frage ist nun 
was die anderen Bytes an Informationen beinhalten könnte. Meiner Meinung 
nach beinhalten sie keine weitere Informationen und müssten demnach 
irgend eine Redundanz oder änliches darstellen...

Autor: finalcu (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
eine kleine Anmerkung: da es sich um eine russische Software handelt, 
dachte ich dass die restlichen Bytes vielleicht sowas wie eine 
Beschreibung des Befehls auf russisch beinhalten könnte. Da aber das 
Byte 00 relativ häufig vorkommt glaube ich nicht, dass es sich um 
irgendeinen Unicode handelt da 00 z.b in KOI-8 keine Bedeutung hat...

Autor: Der Russe (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
... Ja klar, um den Hacker zu verwirren, werden sinnlose Bytefolgen 
gesendet... :-))))

ähm, ich habe auch eine Frage: was bedeutet das: 0x2A

Autor: DerAlbi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Klingt zwar nach ironie, aber: die antowrt wäre: 42.

Autor: Der Russe (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
... wie kommst du auf 42 und was bedeutet das? ... ;-)

Autor: Magnetus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Der Russe schrieb:
> ... wie kommst du auf 42 und was bedeutet das? ... ;-)

Hier gibts ne Lektüre zur Antwort "42":

http://de.wikipedia.org/wiki/42_(Antwort)

Gruß,
Magnetus

Autor: Der Russe (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
... hmmm, dann frage ich mich, warum 42 nicht in obiger Fragestellung 
auftaucht! Oder habe ich etwas übersehen?

Autor: finalcu (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
wahrscheinlich bin ich einfach zu dumm um den Scherz zu erkennen aber 
was hat das alles mit meinem Problem zu tun?

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das ist wie bei Onkel Heisenberg:
Du kennst entweder die Frage oder die Antwort, nie aber beides 
zugleich.

Autor: Der Russe (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
... super rufus, ich hätte es nicht besser ausdrücken können...!

Autor: Der Russe (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
... achso, was mir gerade noch zu der Frage oben einfällt: die Russen 
waren doch auch mal mit den Chinesen befreundet --> vielleicht handet es 
sich ja auch um eine chinesische Beschreibung der Befehle, oder liege 
ich da ganz falsch?

Autor: finalcu (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
"00" macht auch im chinesischen Unicode wenig Sinn. Es sieht doch eher 
nach einer Zahl oder mehreren Zahlen aus. Da die letzten acht Bytes aber 
hoechtswahrscheinlich keine weiteren Informationen bez. dem 
Steuerungsbefehl beinhalten tippe ich auf eine Art Checksum oder sowas. 
Komisch ist nur, dass es sich dabei um soviele Bytes handelt...

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
finalcu schrieb:
> Ja das erste Byte ist die Länge - wie bereits gesagt, bis zum Byte "d0"
> weiss ich was die Bytes darstellen.

ich würde eher sagen, das sind mehere Parameter die, durch d007 getrennt 
sind. d007, umgeschrieben in die richtige Reihenfolge 07d0 ergibt 
dezimal genau 2000. Kann natürlich auch Zufall sein, aber diese Zahl ist 
mir zu 'glatt'. Meine Hypothese: diese 2000 sind eine Form eines 
Trennzeichens. Vor allen Dingen, weil diese 7d0 in jedem Datensatz auch 
mehrfach auftauchen und immer an derselben Stelle. Wie sinnvoll ein 
derartiges Trennzeichen in einer binären Übertragung ist, lass ich mal 
dahingestellt. Vielleicht ist es auch ein historisches Überbleibsel.

> Ein Beispiel:
>
> 10005e001c000000d00728000000d007 beinhaltet folgende Informationen:
>
> - 10 00 ist die Länge (Bytes sind in umgekehrter Reihenfolge), also 16
> Bytes
> - 5e 00 ist der Steuerungsbefehl, also Befehl-Nr. 94
> - 1c 00 00 00 ist ein Parameter, also 28
>
> mit diesem Befehl setzt man eine Spannung auf 28 V.

Welche Spannung?
Steckt das im Befehlscode (94) drinnen, oder kann es sein, dass die 
restlichen Bytes dies beschreiben?

Kannst du noch ein paar weitere Befehl in ihre Bedeutung aufdröseln?
10 00    57 00 10 00 00 00   d0 07   03    d0 07   00 00 00
10 00    57 00 20 00 00 00   d0 07   03    d0 07   00 00 00
0d 00    3e 00 01   d0 07   00   d0 07   03   d0 07
0d 00    3e 00 00   d0 07   00   d0 07   03   d0 07
10 00    5e 00 1c 00 00 00   d0 07  28 00 00 00    d0 07
10 00    5e 00 1b 00 00 00   d0 07  28 00 00 00    d0 07
10 00    64 00 a4 19 48 00   d0 07  00 47 00 01    d0 07
10 00    56 00 20 00 00 00   d0 07  03   d0 07  00 00 00
16 00    64 00 A4 19 48 00 66 00 28 00 00 00   d0 07   00 27 00 00 29 00
16 00    64 00 8c 19 48 00 66 00 28 00 00 00   d0 07   00 27 00 00 29 00


Diese beiden Datensätze
10 00    64 00 a4 19 48 00   d0 07  00 47 00 01    d0 07
16 00    64 00 A4 19 48 00 66 00 28 00 00 00   d0 07   00 27 00 00 29 00
sind interessant. Hast du dich da beim Abschreiben vertan oder ist das 
wirklich so: Gleicher Befehlscode, aber unterschiedliche Parameterlänge 
und Anzahl.

Autor: finalcu (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Karl heinz Buchegger schrieb:
> Welche Spannung?
> Steckt das im Befehlscode (94) drinnen, oder kann es sein, dass die
> restlichen Bytes dies beschreiben?

Das steckt im Befehlscode drinnen...

Karl heinz Buchegger schrieb:
> Diese beiden Datensätze
> 10 00    64 00 a4 19 48 00   d0 07  00 47 00 01    d0 07
> 16 00    64 00 A4 19 48 00 66 00 28 00 00 00   d0 07   00 27 00 00 29 00
> sind interessant. Hast du dich da beim Abschreiben vertan oder ist das
> wirklich so: Gleicher Befehlscode, aber unterschiedliche Parameterlänge
> und Anzahl.

Das ist wirklich so. Beim zweiten Code handelt es sich um zwei Befehle 
die in einem Paket geschickt werden:

10 00    64 00 a4 19 48 00   d0 07  00 47 00 01    d0 07 bedeutet:
- 10 00 = 16 Bytes
- 64 00 = Befehl-Nr. 100
- a4 19 48 00 ist ein Parameter der in binär Schreibweise die Zustände 
von LEDs angibt (0 = aus, 1 = ein), also a4 19 48 00 = 
010010000001100110100100 => LED0=aus, LED1=ein, LED2=aus, LED3=aus etc.

16 00    64 00 A4 19 48 00 66 00 28 00 00 00   d0 07   00 27 00 00 29 00 
bedeutet:
- 16 00 = 22 Bytes
- 64 00 a4 19 48 = Befehl-Nr. 100 mit gleichem Parameter wie oben
- 66 00 zusätlicher Befehl = Befehl-Nr. 102
- 28 00 00 00 = 40, Parameter der zum Befehl 102 gehoert (ich weiss 
nicht genau was der macht, ich glaube es öffnet ein Ventil wobei 40 die 
Nr. des Ventils ist)

was ich soweit gesehen habe ist, dass es keine Rolle spielt wieviele 
Befehle aneinander gehängt werden, am Ende folgen immer 8 Bytes 
beginnend mit "d0"...

ich werde gleich nochmal an den Simulator gehen und überprüfen ob dies 
auch für ganze lange Befehlsreihen zutrifft (beispielsweise bei der 
Initialisierung bis zu 300 Bytes).

Gruss,
finalcu

Autor: finalcu (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
UPDATE: Folgendes habe ich in der Zwischenzeit herausgefunden:

- Auch bei einem langen Paket (Initialisierungspaket 373 Bytes) werden 
am Ende acht Bytes angehängt. Folgend ein Beispiel einer 
Initialisierung:
75010100000200000300000400000500000600000700000800000900000a00000b00000c00000d00000e00000f00001000001100001200001300001400001500001600001700001800001900001a00001b00001c00001d00001e00001f00002000002100002200002300002400002500012600002700002800002900002a00002b00012c00012d00002e00002f00003000003100003200003300003400003500003600003700003800003900003a00003b00003c00003d00003e00003f00004000004100004200004300004400004500004800004900004a00004b00004c00004d00004e00004f00005000005100005200005300005400005500005600005700015800015900015a00005b00005c00005e001c00000060000100000061000062000000000063000000000064008c29280065000000a2006600280000006700000000006800016900000000006a00006b00000000006c00bc0200006d00000000006e00000000006f0000000000d007000000000000

- 7501 ist wieder die Länge, also 373 Bytes
- dann folgen die Befehle: 0100 = Befehl-Nr. 1 mit Parameter 00 = 0, 
0200 = Befehl-Nr. 2 mit Parameter 00 = 0 (bei den Parametern handelt es 
sich um booleans, also entweder 0 (00) oder 1 (01) daher wird 
wahrscheinlich nur ein Byte verwendet, und so geht es weiter bis zum 
letzten Befehl 6f00 = Befehl-Nr. 111 mit Parameter 00000000 = 0
- am Ende steht wieder dieser komische 8 Byte Code, diesmal sieht er 
jedoch leicht ander aus: d007000000000000


Edit
Ich habe mir die Freiheit genommen, die abartig lange Zeile
in [ pre ][ /pre ] (ohne Leerzeichen) einzuschließen.
rufus

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.