C-Bibliotheksfunktionen -mbtowc()
C-Standardbibliothek - <stdlib.h>
mbtowc()Es ist eine Funktion in der C-Standardbibliothek, die ein Multibyte-Zeichen in ein Breitzeichen umwandelt.
mbtowc()Die Deklaration befindet sich in<wchar.h>In der Header-Datei wird sie hauptsächlich verwendet, um die Konvertierung zwischen Multibyte-Zeichensätzen (wie UTF-8) und Breitzeichen-Zeichensätzen (wie Unicode) zu unterstützen.
mbtowc()Wird verwendet, um ein Multibyte-Zeichen (mbstr) in ein Breitzeichen (wc). Diese Funktion basiert auf der aktuellenLC_CTYPEDie Locale (Umgebungseinstellungen) bestimmt, wie Multibyte-Zeichen interpretiert werden. Wenn das Multibyte-Zeichen gültig ist, wird es in ein Breitzeichen umgewandelt. Wenn das Zeichen ungültig ist, gibt sie-1。
Deklaration
Nachfolgend ist die Deklaration der Funktion mbtowc() aufgeführt.
#include <wchar.h> int mbtowc(wchar_t *wc, const char *mbstr, size_t n);
Parameter:
- wc: zeigt auf
wchar_tEin Zeiger auf eine Variable des Typs. Diese Variable empfängt das umgewandelte Breitzeichen. - mbstr: Ein Zeiger auf den Multibyte-String, der die Folge der umzuwandelnden Multibyte-Zeichen darstellt.
- n: gibt an
mbstrDie maximale Anzahl von Bytes in der Zeichenkette. Normalerweise können Sie sie auf die Länge der Zeichenkette setzen.
Rückgabewert
- Bei Erfolg,
mbtowc()Gibt die Anzahl der Bytes zurück, die vom konvertierten Zeichen belegt werden (d. h.,mbstrAnzahl der Bytes des Multibyte-Zeichens). Wennwcist nichtNULL, dann ist der Wert größer als 0. - Wenn ein Fehler auftritt (z. B. ein ungültiges Multibyte-Zeichen), gibt die Funktion zurück
-1。 - Wenn das Ende der Zeichensequenz erreicht ist (zum Beispiel, wenn das Zeichenketten-Abschlusszeichen angetroffen wird
\0), dann wird zurückgegeben0。
Beispiel
Das folgende Beispiel demonstriert die Verwendung der Funktion mbtowc().
Beispiel
#include <stdlib.h>
#include <string.h>
#include <wchar.h>
#include <locale.h>
int main()
{
// Die Locale-Informationen des Programms festlegen
setlocale(LC_CTYPE, "");
// Multibyte-Zeichenkette
const char *str = "Here is example.com";
// Breitzeichen-Array zum Speichern des konvertierten Ergebnisses
wchar_t mb[100];
// Aktueller Zeichenindex und Länge des konvertierten Breitzeichens
int i = 0;
int len;
// Jedes Zeichen in ein Breitzeichen umwandeln
while (*str) {
len = mbtowc(&mb[i], str, MB_CUR_MAX); // Das aktuelle Multibyte-Zeichen konvertieren
if (len > 0) {
str += len; // Zum Anfang des nächsten Zeichens springen
i++; // In das Wide-Character-Array speichern
} else if (len == 0) {
break; // String-Terminator gefunden
} else {
// Fehlerbehandlung für ungültiges Zeichen
printf("Ungültiges Zeichen\n");
break;
}
}
// Die konvertierte Wide-Character-Zeichenkette ausgeben
wprintf(L"%ls \n", mb);
return 0;
}
Lassen Sie uns das obige Programm kompilieren und ausführen, was das folgende Ergebnis erzeugt, da es das Ergebnis in Multibyte-Form ausgeben muss, was eine binäre Ausgabe ist.
这里是 example.com
Beispiel
#include <wchar.h>
#include <locale.h>
int main() {
// Die Locale-Informationen des Programms festlegen
setlocale(LC_CTYPE, "");
const char *mbstr = Hello;
wchar_t wc;
// Zeichen für Zeichen konvertieren
for (size_t i = 0; mbstr[i] != '\0'; i++) {
int len = mbtowc(&wc, &mbstr[i], 1);
if (len > 0) {
wprintf(L"Konvertiertes Breitzeichen: %lc\n", wc);
i += len - 1; // Die Anzahl der Bytes des aktuellen Multibyte-Zeichens überspringen
} else if (len == 0) {
break;
} else {
printf("Ungültiges Zeichen\n");
}
}
return 0;
}
Beschreibung:
Multibyte-Zeichensatz: In einem Multibyte-Zeichensatz (wie UTF-8) kann ein Zeichen aus mehreren Bytes bestehen, während ein Zeichen in einem Breitzeichen-Zeichensatz (wie Unicode) normalerweise durch einen einzelnen
wchar_tWert des Typs (2 oder 4 Bytes auf einigen Plattformen).Locale:
mbtowc()Das Verhalten davon hängt von der aktuellen Locale des Programms ab, insbesondereLC_CTYPEEinstellung, die bestimmt, wie der Multibyte-Zeichensatz interpretiert wird. Daher müssen Sie bei Verwendung dieser Funktion normalerweisesetlocale()die entsprechende Locale festlegen.Fehlerbehandlung: Wenn die eingegebene Multibyte-Zeichenkette kein gültiges Format hat oder nicht in ein Breitzeichen konvertiert werden kann,
mbtowc()gibt zurück-1. Sie müssen den Rückgabewert überprüfen, um sicherzustellen, dass die Konvertierung erfolgreich war.