mbrtowc

Konvertieren eines BYTE-Zeichen sowohl in das entsprechende Breitzeichen.

size_t mbrtowc(
   wchar_t *wchar,
   const char *mbchar,
   size_t count,
   mbstate_t mbstate
);

Parameter

  • wchar
    Adresse eines Breitzeichens, in dem die konvertierten Zeichenfolge mit Breitzeichen (Typ wchar_t) zu empfangen.Dieser Wert kann NULL sein, wenn kein breitzeichen zurückgeben.

  • mbchar
    Die Adresse einer Bytefolge (ein Mehrbytezeichen).

  • count
    Anzahl von Bytes zu überprüfen.

  • mbstate
    Konvertierung Zustand.Wenn dieser Wert NULL ist, wird eine Kategorie Status der internen Konvertierung verwendet.

Rückgabewert

  • 0
    Wenn der folgenden count oder weniger Bytes das Mehrbytezeichen abschließen, das das NULL Breitzeichen darstellt.

  • > 0
    Wenn der folgenden count Bytes oder weniger ein gültiges Mehrbytezeichen ausführen, ist der zurückgegebene Wert die Anzahl der Bytes, die das Mehrbytezeichen abschließen.

  • -1
    Wenn ein Codierungsfehler auftritt. In diesem Fall folgt count oder weniger Bytes nicht mit dem vollständigen und gültigen Mehrbytezeichen beitragen, ist der errno-Wert EILSEQ und mehrdeutige Konvertierung Zustand.

  • -2
    Wenn die folgenden count Bytes in einem unvollständigen Mehrbyten beitragen und alle Zählbytes verarbeitet worden sind.

Hinweise

Wenn wcharein NULL-Wert ist, ist die Funktion für den Aufruf äquivalent:

mbrtowc(NULL, NULL, 1, mbstate)

In diesem Fall werden der Wert der Argumente wchar und count ignoriert.

Wenn wchar nicht NULL ist, prüft die Funktion count Bytes aus mbchar, um die erforderliche Anzahl von Bytes zu bestimmen, muss Folgendes Mehrbytezeichen abzuschließen.Wenn es sich beim nächsten Zeichen gültig ist, wird das entsprechende Mehrbytezeichen in wchar gespeichert, wenn es nicht NULL ist.Wenn das entsprechende eine breite NULL-Zeichen ist, ist der resultierende Status der ursprüngliche Zustand der Konvertierung.

Die mbrtowc-Funktion unterscheidet sich von mbtowc, _mbtowc_l durch seine Neustartfähigkeit.Der Zustand der Konvertierung in mbstate für nachfolgende Aufrufe an derselben oder zu einer anderen restartable Funktionen gespeichert.Ergebnisse werden nicht definiert, wenn die Verwendung restartable und nonrestartable Funktionen kombiniert.Beispielsweise kann eine Anwendung wcsrlen statt wcslenverwenden, wenn ein nachfolgender Aufruf von wcsrtombs verwendet, wobei anstelle wcstombs.

Beispiel

Konvertiert ein Breitzeichen zur Mehrbytezeichen entspricht.

// crt_mbrtowc.cpp

#include <stdio.h>
#include <mbctype.h>
#include <string.h>
#include <locale.h>
#include <wchar.h>

#define BUF_SIZE 100

int Sample(char* szIn, wchar_t* wcOut, int nMax)
{
    mbstate_t   state = {0}; // Initial state
    size_t      nConvResult, 
                nmbLen = 0,
                nwcLen = 0;
    wchar_t*    wcCur = wcOut;
    wchar_t*    wcEnd = wcCur + nMax;
    const char* mbCur = szIn;
    const char* mbEnd = mbCur + strlen(mbCur) + 1;
    char*       szLocal;
    
    // Sets all locale to French_Canada.1252
    szLocal = setlocale(LC_ALL, "French_Canada.1252");
    if (!szLocal)
    {
        printf("The fuction setlocale(LC_ALL, \"French_Canada.1252\") failed!\n");
        return 1;
    }

    printf("Locale set to: \"%s\"\n", szLocal);

    // Sets the code page associated current locale's code page
    // from a previous call to setlocale.
    if (_setmbcp(_MB_CP_SBCS) == -1)
    {
        printf("The fuction _setmbcp(_MB_CP_SBCS) failed!");
        return 1;
    }

    while ((mbCur < mbEnd) && (wcCur < wcEnd))
    {
        //
        nConvResult = mbrtowc(wcCur, mbCur, 1, &state);
        switch (nConvResult)
        {
            case 0:
            {  // done
                printf("Conversion succeeded!\nMultibyte String: ");
                printf(szIn);
                printf("\nWC String: ");
                wprintf(wcOut);
                printf("\n");
                mbCur = mbEnd;
                break;
            }

            case -1:
            {  // encoding error
                printf("The call to mbrtowc has detected an encoding error.\n");
                mbCur = mbEnd;
                break;
            }

            case -2:
            {  // incomplete character
                if   (!mbsinit(&state))
                {
                    printf("Currently in middle of mb conversion, state = %x\n", state);
                    // state will contain data regarding lead byte of mb character
                }

                ++nmbLen;
                ++mbCur;
                break;
            }

            default:
            {
                if   (nConvResult > 2) // The multibyte should never be larger than 2
                {
                    printf("Error: The size of the converted multibyte is %d.\n", nConvResult);
                }

                ++nmbLen;
                ++nwcLen;
                ++wcCur;
                ++mbCur;
            break;
            }
        }
    }

   return 0;
}

int main(int argc, char* argv[])
{
    char    mbBuf[BUF_SIZE] = "AaBbCc\x9A\x8B\xE0\xEF\xF0xXyYzZ";
    wchar_t wcBuf[BUF_SIZE] = {L''};

    return Sample(mbBuf, wcBuf, BUF_SIZE);
}

Beispielausgabe

Locale set to: "French_Canada.1252"
Conversion succeeded!
Multibyte String: AaBbCcÜïα∩≡xXyYzZ
WC String: AaBbCcÜïα∩≡xXyYzZ

Anforderungen

Routine

Erforderlicher Header

mbrtowc

<wchar.h>

.NET Framework-Entsprechung

Nicht zutreffend. Um die Standard-C-Funktion aufrufen, verwenden Sie PInvoke. Weitere Informationen finden Sie unter Plattformaufruf-Beispiele.

Siehe auch

Referenz

Datenkonvertierung

Gebietsschema

Interpretation von Mehrbytezeichen-Sequenzen