wchar_t in C verstehen und schreiben

9

Ich schreibe gerade einen Teil der printf() Funktion für ein Schulprojekt um. Insgesamt mussten wir das Verhalten der Funktion mit mehreren Flags, Konvertierungen, Längenmodifikatoren reproduzieren ...

Das Einzige, was ich tun muss und das mich festhält, sind die Flags %C / %S (oder %lc / %ls ).

Bisher habe ich festgestellt, dass wchar_t ein Typ ist, der Zeichen auf mehr als einem Byte speichern kann, um mehr Zeichen oder Symbole zu akzeptieren und daher mit fast jeder Sprache kompatibel zu sein, unabhängig von ihrem Alphabet und Sonderzeichen.

Ich konnte jedoch keine konkreten Informationen darüber finden, wie ein wchar für die Maschine aussieht, es ist die tatsächliche Länge (die offensichtlich auf der Grundlage verschiedener Faktoren variiert, einschließlich des Compilers, des Betriebssystems ...) oder wie um sie tatsächlich zu schreiben.

Vielen Dank im Voraus

Beachten Sie, dass wir in den Funktionen eingeschränkt sind, die wir verwenden dürfen. Die einzigen zulässigen Funktionen sind write() , malloc() , free() und exit() . Wir müssen in der Lage sein, jede andere benötigte Funktion selbst zu programmieren.

Um das zusammenzufassen, was ich hier frage ist ein paar Informationen darüber, wie man% code%% mit so wenig Code wie möglich "manuell" interpretiert und schreibt, so dass ich versuchen kann, den gesamten Prozess und Code zu verstehen ich selbst.

    
kRYOoX 10.12.2014, 12:39
quelle

1 Antwort

3

Ein wchar_t ähnelt einem char in dem Sinne, dass es eine Zahl ist, aber wenn wir ein char oder wchar_t anzeigen, wollen wir nicht die Zahl sehen, sondern das gezeichnete Zeichen, das der Zahl entspricht. Die Zuordnung von der Zahl zu den Zeichen ist weder durch char noch durch wchar_t definiert, sondern hängt vom System ab. Es gibt also keinen Unterschied in der Endnutzung zwischen char und wchar_t außer für ihre Größe.

In Anbetracht der obigen Ausführungen ist die einfachste Implementierung von printf ("% ls") eine, bei der Sie wissen, welche Systemcodierungen für char und wchar_t verwendet werden. Zum Beispiel hat char in meinem System 8 Bits, hat UTF-8, während wchar_t 32 Bits hat und UTF-32 kodiert. Daher konvertiert die printf-Implementierung nur UTF-32 in UTF-8 und gibt das Ergebnis aus.

Eine allgemeinere Implementierung muss verschiedene und konfigurierbare Codierungen unterstützen und möglicherweise überprüfen, was die aktuelle Codierung ist. In diesem Fall müssen Funktionen wie wcsnrtombs () oder iconv () verwendet werden.

    
hdante 13.12.2014, 20:21
quelle

Tags und Links