Forum: PC-Programmierung Datentyp von gespeicherten Daten


von Binärer (Gast)


Lesenswert?

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

von Karl H. (kbuchegg)


Lesenswert?

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.

: Bearbeitet durch User
von Binärer (Gast)


Lesenswert?

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 ;)

von endianer (Gast)


Lesenswert?

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.

von Amateur (Gast)


Lesenswert?

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.

von Vlad T. (vlad_tepesch)


Lesenswert?

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?

von quappenkaul (Gast)


Lesenswert?

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 ...

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.