Konvertieren, auslesen und speichern von Variablen mit anderer Bitzahl



  • Hi,
    ich will mir eine Funktion schreiben, um .3ds-Dateien, welche auszulesen und eine weitere, um eine im Arbeitsspeicher als SDL_Surface vorhandene Grafik in einen von OpenGL unterstützten Variablentyp zu konvertieren.
    Ich weiß nun nicht, wie ich auf einem beliebigen System eine Variable bzw. eine gewisse Anzahl Bytes aus einer Datei auslese und damit arbeite, ohne, dass ich aus versehen wegen 32 oder 64 Bit zuviele oder zuwenige Bytes aus der Datei auslese o.ä.. Und wie rechne und arbeite ich mit solchen Variablen, also interpretiere sie als Zahl, Kommazahl o.ä.? Oder wie kürze ich einen Variablentyp mit zu vielen Bytes um ihn abzuspeichern?
    Ich kenne mich leider überhaupt nicht mit solchen Variablenkonvertierungen aus, oder wie man diese Längenanpassungen nennt. Hat jemand vielleicht eine kurze Erklärung, einen Link oder zumindest den korrekten Namen für diese Konvertierungen, damit ich selbst suchen kann?
    Wäre für Hilfe echt dankbar, denn solange ich nicht weiß, wie das funktioniert, sitze ich hier auf dem Trockenen und kann an meinem Projekt nicht weiter machen.



  • Ich hoffe, ich habe dich richtig verstanden. Wenn du eine Anwendung schreibst, bei der int 32 Bit breit ist (z.B. MS-Compiler, 32-Bit-Anwendung), dann kannst du dich darauf verlassen, dass das auch so bleibt. Auch wenn deine Anwendung unter einem 64-Bit-OS ausgeführt wird.

    Zu nötigen Konvertierungen/Interpretation von Variablen in deiner Anwendung fände ich es gut, wenn du mal ein, zwei konkrete Beispiele postest, bei denen du nicht weist, wie du zu konvertieren hast.



  • Also ein auf 32 bit kompiliertes Programm behält immer die Variablengrößen, egal auf welchem System? Das wäre ja unter Windows schonmal praktisch, nur bei einem Linux-Paket hilft es immer noch nicht weiter.
    Ein konkretes Beispiel ist schwierig, da ich ohne dieses Wissen noch gar nicht weiß, wie ich mit den entsprechenden Programmteilen anfangen soll. Aber z.B. eine short Integer in einer .3ds ist zwei und eine long vier Byte lang. Wenn ich nun das Programm unter 64 Bit ausführe, wie lese ich diese Integers aus, rechne anschließend mit ihnen (lasse sie als Integer und bei anderen Variablen halt als den entsprechenden Typ erkennen) und wandle vielleicht andere Variablen in solche Integers um, um sie in einer .3ds zu speichern? Ich nehme mal ein, ein char ist auf jedem Rechner genau ein Byte groß oder? Dann könnte man damit zumindest schonmal solche Variablen auslesen, aber wie bekomme ich aus den char normale Variablen bzw. stelle fest, dass das Programm auf 64 Bit oder eventuell auch anders läuft bzw. unter Linux dort als Paket installiert wurde?



  • warum nimmst du nicht eine lib die 3ds lesen kann ? Dann kommst du ums selber machen drum rum 😉



  • Es gibt einige Bibliotheken die dir Typen mit fester Größe anbieten. Z.B. hat SDL Typen wie UInt32. Was ein unsign int mit 32 Bit ist. Oder auch Boost. (http://www.boost.org/doc/libs/1_38_0/libs/integer/index.html)

    Ansonsten kannst du über sizeof und Makros deine eigenen Typen definieren.



  • Wenn ich Typen selbst definiere, wie lasse ich sie dann z.B. als Kommazahl interpretieren, um damit rechnen zu können?

    @ padreigh, Ich will mir selber eine Funktion zum auslesen von 3ds Dateien schreiben, weil ich bisher nichts brauchbares für C++ gefunden habe.


Anmelden zum Antworten