Zum Inhalt springen

Little Endian in Big Endian convertieren


Empfohlene Beiträge

Geschrieben

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!

Geschrieben

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)?

Geschrieben

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........

Geschrieben

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.

Geschrieben

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.

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...