Binärdatei auslesen mit C

Dieses Thema im Forum "Mac OS Entwickler, Programmierer" wurde erstellt von rollohusa, 07.11.2005.

  1. rollohusa

    rollohusa Thread Starter MacUser Mitglied

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

  2. oneOeight

    oneOeight MacUser Mitglied

    Beiträge:
    47.816
    Zustimmungen:
    3.798
    Mitglied seit:
    23.11.2004
    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
     
  3. worf

    worf MacUser Mitglied

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

    Pingu MacUser Mitglied

    Beiträge:
    4.898
    Zustimmungen:
    341
    Mitglied seit:
    04.08.2003
    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: 07.11.2005
  5. 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
     
  6. Vorsicht! er wird vermutlich auf einer 32 bit Architektur arbeiten also ist int ohne qualifizierer = long int also 32 bit.
     
    Zuletzt von einem Moderator bearbeitet: 07.11.2005
  7. rollohusa

    rollohusa Thread Starter MacUser Mitglied

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

    worf MacUser Mitglied

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

    worf MacUser Mitglied

    Beiträge:
    848
    Zustimmungen:
    13
    Mitglied seit:
    06.01.2005
    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
      Dateigröße:
      12,9 KB
      Aufrufe:
      26
Die Seite wird geladen...

Diese Seite empfehlen