Binärdatei auslesen mit C

rollohusa

Mitglied
Thread Starter
Dabei seit
15.08.2005
Beiträge
91
Reaktionspunkte
0
Hi,
ich hab da mal wieder ein kleines Problem.
Ich soll fürs Studium eines kleines Prog in C schreiben, dass aus einer Datei die Daten, die als Binärdaten gespeichert wurden, auslesen und ausgeben.

Leider funktioniert das irgendwie nicht auf meinem iBook. Also hab ich es auf dem PC geschrieben. Wieso klappt der gleiche Programmcode nicht auf dem MAC????

Kann mir da einer helfen?

PS: Ich hab die Dateien mal angehängt!
 

Anhänge

  • daten.zip
    1 KB · Aufrufe: 107
lass doch mal den debugger laufen ;)
anscheinend liegt es daran, dass dein fread von n irgendwas komisches liefert und damit quasi in fast-endlos-schleife gerät...

so liest man auch keine dateien aus, das tut man normalerweise nur while !=EOF
 
hmm lang lang ist es her das ich selber programmiert habe ;-)

Könnte sein das es mit der Art Zu Tun hat wie die Daten auf den verschiedenen
System gehalten werden.

Stichwort little oder big endian.

LG Worf
 
Jep, worf gab das Stichwort.

Es dürfte am Endian liegen. Denn wenn ich bedenke, daß ein int ein 16-bit Wert ist, dann lese ich folgendes als Schleifenzähler (erster Wert) aus der Datendatei:
Code:
Data  Intel        Motorola
0a00  00a0 -> 10   0a00 -> 2560


Pingu
 
Zuletzt bearbeitet:
rollohusa schrieb:
Hi,
ich hab da mal wieder ein kleines Problem.
Ich soll fürs Studium eines kleines Prog in C schreiben, dass aus einer Datei die Daten, die als Binärdaten gespeichert wurden, auslesen und ausgeben.

Leider funktioniert das irgendwie nicht auf meinem iBook. Also hab ich es auf dem PC geschrieben. Wieso klappt der gleiche Programmcode nicht auf dem MAC????

Kann mir da einer helfen?

PS: Ich hab die Dateien mal angehängt!

Es liegt definitiv daran dass die Datei daten.dat auf einem x86 System erstellt wurde in LitlleEndian Byte Reihenfolge. Auf deinem iBook werden Bytes in BigEndian Reihenfolge verarbeitet.

z.B entspricht der erste Eintrag in daten.dat
Code:
0x0A 0x00 0x00 0x00
(die Zahl der Einträge in der Datei) auf dem PC = 10 Einträge auf dem MAC aber 167772160 Einträge.

BigEndian LittleEndian info: http://de.wikipedia.org/wiki/Byte-Reihenfolge

Um das Programm auf den MAC zu portieren musst du die Bytes nach dem lesen tauschen also
Code:
0x0A 0x00 0x00 0x00 bzw z.B 0x12 0x34 0x56 0x78

muss zu
Code:
0x00 0x00 0x00 0x0A bzw 0x78 0x56 0x34 0x12

werden
 
Pingu schrieb:
Denn wenn ich bedenke, daß ein int ein 16-bit Wert ist

Vorsicht! er wird vermutlich auf einer 32 bit Architektur arbeiten also ist int ohne qualifizierer = long int also 32 bit.
 
Zuletzt bearbeitet von einem Moderator:
rollohusa schrieb:
Und wie machen ich das in C?

sage mal was und wo studierst du denn ?
sind das eure ersten Schritte in C?

Habt ihr die Grundlagen noch nicht durch?
Da ich eher aus der Pascal Delphi Ecke komme kann ich dir leider nicht sagen wie man das in C macht.

LG worf
 
Hi@all,

habe mal ein Wenig Zeit gefunden und habe das Prog so umgestrickt
das es wahlweise für MAC oder PC kompiliert werden kann.

Googeln nach "c convert endian" brachte die Lösung

LG worf
 

Anhänge

  • daten.zip
    12,9 KB · Aufrufe: 86
Zurück
Oben Unten