DBO Geschrieben 8. Mai 2002 Geschrieben 8. Mai 2002 Hi, kennt jemand von euch eine Freeware Lib bzw. irgendwas aus der WinAPI/MFC mit der man mit einen Intel System Datein in Big Endian System erstellen kann???? Oder was fast noch besser wär, kennt jemand eine lib o.ä. mit der man Dateien die nach den Little Endian format geschrieben wurde, ins Big Endian format umgewandelt wurden. Thx 4 your help! Zitieren
Klotzkopp Geschrieben 8. Mai 2002 Geschrieben 8. Mai 2002 Solange Du das Dateiformat nicht kennst, kannst Du nichts konvertieren. Woher willst Du wissen, ob ein Byte in der Datei einfach nur ein Byte ist (und damit so gelassen werden kann, wie es ist) oder zu einem WORD oder DWORD gehört (und damit umgewandelt werden muss)? Zitieren
DBO Geschrieben 8. Mai 2002 Autor Geschrieben 8. Mai 2002 ok, heist das praktisch, ich muss das während des entwickelns schon berücksichtigen, es ist nämlich so: Ich soll eine Funktion entwickeln welche mir unter meinen Desktop mit Intel System eine Datei erstellt, welche dann auf ein Motoroa System, welches Big Endian hat, überspielt wird. Nur stellt sich für mich die Frage, in welcher Form muss ich das beim entwickeln berücksichtigen? Muss ich da evtl. nur irgendein Flag setzen, oder gibts da irgendwelche Libs dafür, oder muss ich das seltst so proggn das passt??? :confused: Entwicklungsumgebung is Visual Studio 6.0 P.S. das Dateiformat wäre übrigens auch bekannt........ Zitieren
Klotzkopp Geschrieben 8. Mai 2002 Geschrieben 8. Mai 2002 Wenn die Daten so in der Datei abgelegt werden sollen, dass sie auf der Motorola-Plattform ohne Umwandlung gelesen werden sollen, dann müssen die Daten beim Erstellen der Datei auf der x86-Plattform konvertiert werden. Du musst dann die Bytereihenfolge jedes 16- oder 32-Bit-Wertes vertauschen, das geht mit htons bzw. htonl. Zitieren
Crush Geschrieben 8. Mai 2002 Geschrieben 8. Mai 2002 Wie Klotzkopp sagt: Eine Datei beinhaltet die Daten normalerweise einfach hintereinandergereiht. Daraus geht dann nicht hervor, wieviel Bytes eine logische Einheit ergeben, solange man keine näheren Informationen dazu mitschreibt. Wechseln die Zugriffe von verschiedenen Datentypen ist es praktisch nicht möglich ohne Zusatzinformationen diese auf dem einen oder anderen System korrekt zu behandeln. Das Problem taucht beim Einlesen auf. Wird da nicht byteweise gearbeitet gibt es Probleme. Little-Big-Endian macht ja nur Ärger wenn man anders als byteweise zugreift. Das Einlesen und Schreiben der Daten muß also Byteweise erfolgen um jeden Ärger zu beseitigen. Dabei muß man sich darauf einigen, in welchem Format die Bytes jeweils geschrieben werden. Es ist geschickt sich eine Union zusammenzubasteln wie hier beim Thema Low/High-Endianess und dann beim entsprechenden Zugriff über die richtige Unit auf die Daten zuzugreifen. Am Anfang sollte man eine Kennzeichnung zum Herausfinden ob little oder big einfügen (steht ja auch im Beispiel). Also nicht etwa nur an der Dateiendung orientieren sondern sicherheitshalber am besten im Code diese Kennung setzen, damit ein Renamen einen nicht durcheinander bringt. Das Einfachste Wäre alles klar einzugrenzen: Am Anfang der Datei die Endianess kennzeichnen, dann jeweils die Art der Daten & Länge des Datenblocks gefolgt von den Daten selbst. Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.