Hey zusammen,
ich habe eine gespeichterte Datei mit Messdaten (Zahlen) aus einem
unbekannten Programm. Die Daten sehen im Hexdezimalformat so aus:
XX XX 00 20 XX XX 00 20 XX XX 00 20 ... (für XX stehen jeweils beliebige
unterschiedliche Werte)
Ich bin mir nicht sicher, ob das "00 20" eine Art Trennzeichen und das
"XX XX" ein integer ist, oder vielleicht nur das "20" ein Trennzeichen,
und die "00" gehört zur Zahl, oder ist der komplette Block aus "XX XX 00
20" vielleicht ein Float (Single?) oder long Integer?
Ich meine mich erinnern zu können, dass normalerweise die Daten
rückwärts gespeichert werden, d.h. "1000" wird als "E8 03" gespeichert,
stimmt das?
Könnte mir jemand einen Tip geben um welchen Datentyp es sich hier
handeln könnte?
Liebe Grüße,
Max
Binärer schrieb:> ich habe eine gespeichterte Datei mit Messdaten (Zahlen) aus einem> unbekannten Programm. Die Daten sehen im Hexdezimalformat so aus:> XX XX 00 20 XX XX 00 20 XX XX 00 20 ... (für XX stehen jeweils beliebige> unterschiedliche Werte)> Ich bin mir nicht sicher, ob das "00 20" eine Art Trennzeichen und das> "XX XX" ein integer ist,
wer weiss das schon.
> oder vielleicht nur das "20" ein Trennzeichen,
möglich, aber eher unwahrscheinlich. Zumal sich die Frage erhebt, wozu
man in einem Binärfile überhaupt ein Trennzeichen braucht. Schliesslich
kennt man ja den Aufbau und weiß, welches Byte was darstellt.
> und die "00" gehört zur Zahl, oder ist der komplette Block aus "XX XX 00> 20" vielleicht ein Float (Single?) oder long Integer?
auch möglich.
> Ich meine mich erinnern zu können, dass normalerweise die Daten> rückwärts gespeichert werden, d.h. "1000" wird als "E8 03" gespeichert,> stimmt das?
Nein. Das hängt von mehreren Faktoren ab. Meistens spiegelt sich in der
Reihenfolge wieder, wie der CPU Typ die Dinge intern handhabt. Aber als
generelle Regel, dass immer rückwärts gespeichert wird, kann man das so
nicht sagen.
> Könnte mir jemand einen Tip geben um welchen Datentyp es sich hier> handeln könnte?
Wenn es ein Binärfile ist, dann kann man so überhaupt nichts darüber
aussagen. Am ehesten kommt man noch weiter, wenn man die Dateiendung als
Suchhilfe benutzt bzw. weiß was die Daten eigentlich darstellen sollen.
Ansonsten heißt es nur: reverse Engeneering und mit Papier und Bleistift
und Raten möglichst viele Files analysieren und nach Zusammenhängen
suchen. Wenn man jedoch auch nicht weiß, was da eigentlich gespeichert
ist, dann ist das schwierig. Vergleichbar mit der ENtschlüsselung der
Hieroglyphen ohne den Rosetta-Stein. Es könnte einfach alles bedeuten.
Vielen Dank schonmal für die Hilfe! Ich hatte gehofft, dass dies
möglicherweise eine Standard-Form ist, in der beispielsweise C Daten aus
einem Array per printf oder so speichert. Schade ;)
Binärer schrieb:> Ich meine mich erinnern zu können, dass normalerweise die Daten> rückwärts gespeichert werden, d.h. "1000" wird als "E8 03" gespeichert,> stimmt das?
du meinst die byte reihenfolge ("endianess").
wenn du einen 2byte integer hast, so liegt die zahl im speicher verkehrt
herum - zumindest bei little endian wie dem altbekannten x86.
wenn du nun binär die bytes einfach in eine datei schreibst, so hast du
auch dort die verkehrte reihenfolge.
du kannst aber auch genau darauf achten und schauen, dass du die bytes
in big endian form in die datei speicherst. wenn du kompatibel zu
verschiedenen architekturen sein möchtest, musst du zumindest
spezifizieren, wie du die daten speicherst.
Sind die Daten Zeilenweise oder Endlos organisiert?
Natürlich ist es möglich, dass 00 20 eine Art Synchron- oder
Trennzeichen ist. Das würde aber bedeuten, dass die Kombination 00 20
als Messdaten ausgeschlossen ist.
Normalerweise gibt es zwei Arten Daten zu speichern. Big endian oder
little endian - falls Du mal googlen willst.
Werden große Zahlen z.B. long in einer Datei gespeichert, so kann es
vorkommen, dass über einen längeren Zeitraum, wenn sich nur die 2
unteren Bytes ändern, solche, scheinbar Konstanten, Muster entstehen.
gib mal ein paar beispiele für deine XX
ist es wirklich ein binärfile?
0x20 ist ein Leerzeichen und würde sich als Trennzeichen eine
Textformates anbieten.
Hast du irgendwelche Informationen über die Daten?
was wurde gemessen? welcher Wertebereich kann angenommen werden?
kennst du vielleicht sogar das Tool, wo die rauskommen?
Wie andere bereits geschrieben habe: Ohne mehr Daten lässt sich daraus
nichts ableiten. Bei Big Endian könnte es sich bei 00 20 um einen
kleinen Offset handeln - geringe Gleichspannung, um mal ein
willkürliches Beispiel zu nennen - und der sich ändernde Anteil 32 + x
betragen. Wenn es wirklich immer 00 20 ist, wäre der Offset dann
(innerhalb der Auflösung) allerdings konstant ...
Die 00 20 könnten auch Flags oder einen Messkanal oder beides
darstellen. Flags = 20, Kanal = 00, Messwert = XX XX.
Oder ein willkürliches Trennzeichen oder die Schuhgröße der Schwester
des Entwicklers oder ...