Binärdatei auslesen mit C

  1. rollohusa

    rollohusa Thread StarterMacUser Mitglied

    Mitglied seit:
    15.08.2005
    Beiträge:
    91
    Zustimmungen:
    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:

    • Dateigröße:
      1 KB
      Aufrufe:
      37
    rollohusa, 07.11.2005
  2. oneOeight

    oneOeightMacUser Mitglied

    Mitglied seit:
    23.11.2004
    Beiträge:
    48.160
    Zustimmungen:
    3.885
    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
     
    oneOeight, 07.11.2005
  3. worf

    worfMacUser Mitglied

    Mitglied seit:
    06.01.2005
    Beiträge:
    848
    Zustimmungen:
    13
    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
     
    worf, 07.11.2005
  4. Pingu

    PinguMacUser Mitglied

    Mitglied seit:
    04.08.2003
    Beiträge:
    4.900
    Zustimmungen:
    341
    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
     
    Pingu, 07.11.2005
  5. vava

    vava

    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
     
    vava, 07.11.2005
  6. vava

    vava

    Vorsicht! er wird vermutlich auf einer 32 bit Architektur arbeiten also ist int ohne qualifizierer = long int also 32 bit.
     
    vava, 07.11.2005
  7. rollohusa

    rollohusa Thread StarterMacUser Mitglied

    Mitglied seit:
    15.08.2005
    Beiträge:
    91
    Zustimmungen:
    0
    Und wie machen ich das in C?
     
    rollohusa, 07.11.2005
  8. worf

    worfMacUser Mitglied

    Mitglied seit:
    06.01.2005
    Beiträge:
    848
    Zustimmungen:
    13
    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
     
    worf, 07.11.2005
  9. worf

    worfMacUser Mitglied

    Mitglied seit:
    06.01.2005
    Beiträge:
    848
    Zustimmungen:
    13
    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:

    • Dateigröße:
      12,9 KB
      Aufrufe:
      28
    worf, 16.11.2005
Die Seite wird geladen...
Ähnliche Themen - Binärdatei auslesen
  1. Uniquesone
    Antworten:
    5
    Aufrufe:
    1.225
    Uniquesone
    21.10.2011
  2. Killerplauze
    Antworten:
    0
    Aufrufe:
    707
    Killerplauze
    22.09.2011
  3. Maverick79
    Antworten:
    8
    Aufrufe:
    1.279
    Maverick79
    26.08.2011
  4. Smoothie4
    Antworten:
    8
    Aufrufe:
    1.897