Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
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.