Real48 - Daten lesen
-
Hallo,
ich habe eine Datei in der Daten im Real48 (48bit), in Hex gespeichert sind.
Eine Hex-Datei mit dem Inhalt: (1, 1.1, 1.2, 1.3, 1.4, 1.5) = 6 Werte
Sieht wie folgt aus:
00000000h: 81 00 00 00 00 00 81 CD CC CC CC 0C 81 9A 99 99
00000010h: 99 19 81 66 66 66 66 26 81 33 33 33 33 33 81 00
00000020h: 00 00 00 40Ich bräuchte nun ein beispiel wie ich diese Daten mit ANSI-C einlesen kann und auf dem Bildschirm ausgeben kann?
Ich Danke schon im voraus für jegliche Hilfe!
-
Hallo,
leider konnte mir noch niemand helfen. Ich habe noch folgende Infos zusammengetragen:
Es handelt sich bei meiner .r48 Datei um eine DIADEM Datei. DIADEM ist ein von NI vertriebenes Mess- & Datenprogramm.
Auf der NI Webseite habe ich eige Informationen zum Aufbau der Datei gefunden:
http://zone.ni.com/devzone/conceptd.nsf/webmain/9C7769446E6F18B486256C4C0070FC3C
Ich gehe davon aus das meine Daten in dem sogenannten "channel mode" gespeichert sind.
Ich muss zudem zugeben kein großer C-Kenner zu sein. Es würden mir also schon ein paar Tipps zum einlesen von Binären Dateien weiterhelfen.
-
Hi,
verstehe zwar den Zusammenhang Deines 2. Posting zu Deinem ersten Posting nicht so ganz (auf dem Link steht nix von Real48 oder?), daher keine Ahnung, ob Dir das hier weiter hilft:
Real48 ist (auch) ein alter TurboPascal-Typ. Zumindest sehen die Daten prinzipiell so aus, als ob es das sein könnte. Da könnte Dir der folgende Link weiterhelfen:
http://www.moon-soft.com/program/FORMAT/binary/bpreal.zip
Der Source-Code behauptet Real48 nach double (IEEE) zu wandeln. Beim drüber schauen, würde ich vermuten, dass er noch aus der 16Bit Zeit stammt. Die unsigneds in dem Code müssten vermutlich unsigned shorts sein (ansonsten wäre der dort definierte Real-Typ 12 Bytes groß)Eine andere Variante wäre sich Delphi zu schnappen und es damit zu konvertieren (Delphi kennt Real48 noch und zusätzlich den ganz normalen double-Typ).
Beim Umgang mit binären Dateiinhalten muss man gelegentlich noch auf die Bitreihenfolge achten (Big/Little Endian). Wenn die Datei aber mit einem PC Programm erstellt ist und Du den Kram auf einem PC umwandelst, dann sollte es damit kein Problem geben.
Solltest Du mit C versuchen, die Daten einzulesen, müsstes Du in etwa folgendes probieren (aus dem Kopf; mitdenken erwünscht; mein letztes echtes Ansi-C Programm liegt bereits einige Jahre hinter mir):
FILE* fp = fopen("datei", "rb2"); while( !feof( fp)) { // wenn Du die Routine aus dem Beispiel nutzt, dann besser den dortigen // Real Typ nutzen char aReal48{6]; fread( aReal48, sizeof( char), 6, fp); // Returnwert prüfen double d = double_to_real( aReal48); printf( "%lf\n", d); }
-
Danke für die Hilfe. Leider bin ich auch kein C Programmierer und hadere gerade noch mit dem einlesen der Datei. Den Link den Du gesendet hast scheit aber genau das richtige zu sein!
Mein Ziel ist es immer nich die im ersten Beitrag genannte Daten einzulesen und die Daten auszugeben. Der zweite Beitrag sollte nur erläutern woher ich die Datei überhaupt habe.
-
Die Datei bprtest.c enthält doch ein Testprogramm, dass sich leicht für Deine Zwecke modifizieren lässt.
Nach dem fopen bis zum (inkl.) rewind alles löschen und als Dateinamen Deine Datei nehmen. Damit sollte es dann klappen, wobei Du meiner Meinung nach noch alle unsigned (int) (32Bit bei den meisten Compilern) durch unsigned short (16Bit)ersetzen solltest.
Beispiel:
typedef unsigned short real[3]; // statt typedef unsigned real[3];
Wenn's weiterhin unklar ist, kannst Du die (eine Beispiel-) Datei mal irgendwo hinlegen, dann kompilier ich den Kram mal selbst und probiers aus.