long: 32 Bit vs 64 Bit



  • Andreas771 schrieb:

    Kannst du das mit der Byte-Order etwas genauer erläutern?

    Mit der Byte-Order meinte ich u.a. die Endianess - bei vier Byte gibt es da noch mehr Möglichkeiten, die zu einer Zahl zusammenzufassen.

    Also wie schreibt fwrite() und was muss ich machen, damit es immer klappt?

    fwrite schreibt die Bytes in der Reihenfolge, in der sie im Speicher stehen - solange du die Datei im selben System weiterverarbeitest, sollte das egal sein. Wenn du die Daten zwischen verschiedenen Systemen austauschen willst, mußt du sie selber in eine definierte Reihenfolge bringen.



  • Benutzt C/C++ intern eigentlich immer die selbe Endianess oder immer die Endianess des benutzten PCs?



  • Das wird im Standard nicht festgelegt, also kann jeder Compiler selber entscheiden, wie er die Werte darstellt (es ist noch nicht einmal festgelegt, daß int in Zweierkomplement rechnen muß). Und der Compiler wird normalerweise die Darstellung verwenden, mit der der drunterliegende Prozessor am besten umgehen kann.



  • Ok. Das heißt, dass vermutlich dieser Code:

    int i = 0xAABBCCDD;
    char* c = (char*)&i;
    printf("%i", *c);
    

    Auf einer Little Endian Maschine DD ausgibt und auf einer Big Endian Maschine AA, oder?

    Mein Problem ist also gelöst, wenn ich überall int32_t benutze?



  • Nein.



  • Was nein?



  • Andreas771 schrieb:

    Mein Problem ist also gelöst, wenn ich überall int32_t benutze?

    Wutz schrieb:

    Nein.

    Dein Problem ist nicht gelöst wenn du überall int32_t benutzt.



  • Fragenerklärer schrieb:

    Andreas771 schrieb:

    Mein Problem ist also gelöst, wenn ich überall int32_t benutze?

    Wutz schrieb:

    Nein.

    Dein Problem ist nicht gelöst wenn du überall int32_t benutzt.

    Wieso nicht? Wenn ich int32_t benutze, dann schreibe ich sowohl in 32 als auch 64 Bit Modus immer gleich viele Bytes? 😕



  • Wie schnell vergisst du eigentlich die vorigen Beiträge, z.B. zum Thema Byteorder, dass du solche Fragen stellst?





  • Wutz schrieb:

    Wie schnell vergisst du eigentlich die vorigen Beiträge, z.B. zum Thema Byteorder, dass du solche Fragen stellst?

    Ich habe doch bereits gesagt, dass ich mich um Endianess kuemmere. Was denkst du denn wieso ich vor fwrite eine Funktion namens swapBytes() aufrufe? 🙄

    Also nochmal: Wenn ich mich um die Endianess kuemmere, und immer int32_t benutze, dann sollte schreiben und lesen sowohl in 32 bit als auch 64 bit funktionieren, oder?



  • Andreas771 schrieb:

    Ich habe doch bereits gesagt, dass ich mich um Endianess kuemmere. Was denkst du denn wieso ich vor fwrite eine Funktion namens swapBytes() aufrufe? 🙄

    Weil du der Meinung bist, daß diese Funktion cool aussieht 🕶 Wir wissen nicht, was genau diese Funktion macht, aber wenn du nicht für jedes System eine eigene Version hast, wird es vermutlich irgendwo das falsche sein.


Anmelden zum Antworten