wchar_t und Portabilität von Files



  • Hi,

    ich habe hier ein Problem mit dem wchar_t-Datentyp. Dieser soll in einer (binären) Datei gespeichert werden, in der dann auch noch z.B. int-Werte enthalten sein werden.

    Das ist mit reinem ASCII und char-Datentypen kein Problem, die Länge eines in einer zu speichernden Struktur enthaltenen Char-Arrays ist hier ja fix. Ersetze ich das char-Array aber durch ein wchar_t-Array, dann wird es schwierig. Unter Windows ist wchar_t ein unsigned short, unter Linux ist es 4 Byte lang. D.h. entsprechende Files sind nicht portabel, sie funktionieren nur auf dem gleichen System.

    Welche Lösungsansätze gibt es hier um dieses 2/4-Byte-Problem zu umgehen? Daran, dass die Daten in einem binären Format gespeichert werden müssen kann ich vermutlich nicht viel Ändern...



  • Also passt ein wchar_t immer in ein int ? Dann nimm doch einfach ein int .

    Das ist mit reinem ASCII und char-Datentypen kein Problem, die Länge eines in einer zu speichernden Struktur enthaltenen Char-Arrays ist hier ja fix.

    Achso, sicher?



  • µngbd schrieb:

    Also passt ein wchar_t immer in ein int ? Dann nimm doch einfach ein int .

    D.h. es muss in jedem Fall hin- und herkopiert werden - nicht gerade schön. Irgend wie finde ich es ja seltsam, dass der ANSI-Standard hier nichts wirklich portables vorgibt...



  • Nachtrag: in dem Fall muss nicht nur kopiert sondern auch konvertiert werden - was nicht eben trivial ist, speziell wenn man von UTF32 nach UTF16 wandeln muss.



  • D.h. es muss in jedem Fall hin- und herkopiert werden - nicht gerade schön.

    Ab hier komme ich nicht mehr mit. Was nun, schreiben, kopieren oder konvertieren?



  • µngbd schrieb:

    D.h. es muss in jedem Fall hin- und herkopiert werden - nicht gerade schön.

    Ab hier komme ich nicht mehr mit. Was nun, schreiben, kopieren oder konvertieren?

    Ich speichere z.B. mein wchar_t/int-Array unter Linux. Dort ist wchar_t gleich 4 Byte gleich UTF32. Laden möchte ich unter Windows wo wchar_t gleich zwei Byte gleich UTF16 ist. Also muss ich von UTF32 (mehr Informationsgehalt) nach UTF16 konvertieren.



  • ^^wenn du selbst die programme schreibst, die mit diesen wchars hantieren, dann leg dich doch auf ein format fest. ausserdem gibts noch so ziemlich unleserliche umwandlungsfunktionen (mbstowcs() oder wie die heissen). vielleicht kannste damit was anfangen.
    --> http://msdn.microsoft.com/en-us/library/5d7tc9zw(VS.80).aspx
    🙂



  • Das klingt doch mal gut 🙂 Das Multibyte-Format sollte dann ja eigentlich auch plattformübergreifend kompatibel sein!?



  • TomoT schrieb:

    Das klingt doch mal gut 🙂 Das Multibyte-Format sollte dann ja eigentlich auch plattformübergreifend kompatibel sein!?

    es *gibt* ein Standard, es nennt sich UTF-8 😉



  • supertux schrieb:

    es *gibt* ein Standard, es nennt sich UTF-8

    UCS-2, der native zeichensatz der windows-kisten, ist auch ISO/IEC standardisiert. aber was bedeutet das schon, wenn programme trotzdem mit unterschiedlichen kodierungen arbeiten?
    🙂


Anmelden zum Antworten