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 aufwchar_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 anmbstrDie 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 <stdio.h>
#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 <stdio.h>
#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:

  1. 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 einzelnenwchar_tWert des Typs (2 oder 4 Bytes auf einigen Plattformen).

  2. 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.

  3. 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.

C-Standardbibliothek - <stdlib.h>

Weitere Erweiterungen