Binärfile verschiedene Datentypen
-
Hallo,
ich möchte ein Binärfile mit Matlab auslesen. Dazu gibt es eine ähnliche Funktion wie in C, also fread. Da das "schrittweise" auslesen die Laufzeit signifikant erhöht, lese ich mit einem Zug die gesamte Datei ein (->Ram).
Nun habe ich das Problem, dass in der Datei verschiedene Datentypen vorkommen. Z.B. habe ich 4 mal hintereinander Int32 Werte, dann Single, dann Float etc.
Das Problem im Matlab ist, dass man die gesamte Datei nur mit einem Datentyp auslesen kann (wenn man es in einem Zug macht).
Meine Frage:
Wenn ich z.B. die Datei mit Int8 auslese, gäbe es die Möglichkeit aus mehreren Int8 Werten, wenn ich sie "zusammenfüge", den richtigen Wert für einen Int32-Wert ausrechnen? Oder ist dieser Gedanke totaler Schwachsinn?
Gibt es vielleicht bessere Lösungsansätze?Danke für jeden Tipp!
-
Bei Integern geht das ganz einfach, du musst ja nur die einzelnen "Byte-Stellen" der Zahl zusammenaddieren.
Also Byte1 + Byte2 * 256 + Byte3 * (256*256) + Byte4 * (256*256*256).
Bei float/double wirds aber zumindest so nicht gehen.
-
Hi Hustbaer,
jo das ist leider wirklich Schwachsinn. Das läuft auf eine Konvertiererei raus, wo Du auch gleich Textformat oder einzelne Variablen lesen kannst.
Der einfachste Weg, wenn Dein Compiler Dir erlaubt, ihn so einzustellen, dass jede Variable auf jeder beliebigen Adresse beginnen kann, dass Du direkt mit Zeigern arbeitest. Wenn das nicht geht, so dass bestimmte Typen immer an durch 2,4 oder 8 teilbaren Adressenstehen müssen, dann arbeitest Du mit einer Union, die alles was vorkommen kann sein kann, und kopierst die jeweils benötigte Bytezahl da rein und liest im richtigen Typ aus.Gruß Mümmel