Forum: PC-Programmierung ASCII zu UTF-16 mit Präprozessor


von Alexander F. (alexf91)


Lesenswert?

Guten Abend!

Um bei meinem derzeitigen Projekt benötige ich eine Präprozessorroutine, 
die mir normale ASCII Strings in UTF-16 Strings umwandelt.
Vereinfachen würde eine solche Routine vor allem die Konfiguration von 
USB Stringdeskriptoren (diese müssen in UTF-16 angegeben werden). Das 
Programm soll auf einem Mikrocontroller laufen, die Konvertierung sollte 
daher bereits vorm Kompilieren geschenen. Ich habe den Beitrag trotzdem 
unter PC-Programmierung gepostet, da das Problem ansonsten 
Prozessor-/Plattformunabhängig ist.

Im Prinzip stelle ich mir das so vor, dass aus einem 8 Bit ASCII Wert 
ein 16 Bit Wert wird, wie ich das jedoch auf Strings anwende ist mir 
schleierhaft.

Funktionieren würde das ganze natürlich auch ohne eine solche Routine, 
jedoch lassen sich die Source-Files um einiges besser lesen bzw. 
anpassen.

von sebastian (Gast)


Lesenswert?

Probier mal ob sizeof(wchar_t)==2.
Dann geht es vielleicht einfach mit einem L davor.
google: C wide string literal

von Rolf M. (rmagnus)


Lesenswert?

Alexander F. schrieb:
> Im Prinzip stelle ich mir das so vor, dass aus einem 8 Bit ASCII Wert
> ein 16 Bit Wert wird,

ASCII hat nur 7 Bit.

> wie ich das jedoch auf Strings anwende ist mir schleierhaft.

Das ist simpel. Einfach nach jedem Zeichen ein Nullbyte einfügen (oder 
davor - je nachdem, ob big oder little endian benötigt wird).

von Joachim D. (Firma: JDCC) (scheppertreiber)


Lesenswert?

Alexander F. schrieb:
> benötige ich eine Präprozessorroutine,

Dein Compiler kann utf-16 lesen ?

Geschickter wäre das im Programm zB bei der Zeichenausgabe
einzubauen (wie es Rolf borgeschlagen hat). Halber Platzbedarf.

von Alexander F. (alexf91)


Lesenswert?

Ich verwende jetzt einfach uint16_t mit einem vorgestelltem L vor dem 
String.
Die Sache mit dem Speicherplatz ist mir durchaus bewusst, jedoch ist mir 
das bei 512k Flash nicht so wichtig.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.