mbrtowc
Znak wielobajtowego przekonwertować na równoważne szerokich znaków.
size_t mbrtowc(
wchar_t *wchar,
const char *mbchar,
size_t count,
mbstate_t mbstate
);
Parametry
wchar
Adres szerokich znaków na ciąg przekonwertowany szerokich znaków (typu wchar_t).Wartość ta może być NULL Jeśli wymagane jest bez powrotu szerokości znaków.mbchar
Adres sekwencji bajtów (znaków wielobajtowych).count
Liczba bajtów do sprawdzenia.mbstate
Stan konwersji.Jeśli wartością tą jest NULL, kategoria Stan konwersji wewnętrznej jest używany.
Wartość zwracana
0
Jeśli następny count lub mniejszą liczbę bajtów uzupełnienie znaków wielobajtowych, która reprezentuje NULL szerokości znaków.> 0
Jeśli następny count lub mniejszą liczbę bajtów kompletny prawidłowych znaków wielobajtowych, wartość zwracana jest liczba bajtów, które ukończyć znaków wielobajtowych.-1
Jeśli wystąpi błąd kodowania, w którym to przypadku następnego count lub mniejszą liczbę bajtów nie przyczyniają się do znaków wielobajtowych kompletne i prawidłowe, będzie wartość errno, EILSEQ i stan konwersji niejednoznaczne.-2
Jeśli następny count bajtów, które przyczyniają się do niekompletnych wielobajtowe i wszystkie Licznik Bajty zostały przetworzone.
Uwagi
Jeśli wcharma wartość ZEROWĄ wartość, jest równoważne wywołanie funkcji:
mbrtowc(NULL, NULL, 1, mbstate)
W tym przypadku wartość argumentów wchar i count są ignorowane.
Jeśli wchar nie jest NULL, funkcja sprawdza, czy count bajtów z mbchar, aby określić wymaganą liczbę bajtów wymaganych do ukończenia następnego znaków wielobajtowych.Jeśli następny znak jest prawidłowa, odpowiednich znaków wielobajtowych jest przechowywana w wchar , jeśli nie ma wartości NULL.Jeśli znak jest odpowiedni znak NULL szeroki, wynikowy Państwo jest Państwem początkowej konwersji.
mbrtowc Funkcja różni się od mbtowc, _mbtowc_l przez jego restartability.Stan konwersji jest przechowywany w mbstate dla kolejnych zaproszeń na to samo lub inne funkcje Przerywalne.Wyniki są niezdefiniowane, przy użyciu funkcji Przerywalne i nonrestartable.Na przykład, aplikacja będzie korzystać z wcsrlen zamiast wcslen, jeśli kolejne wywołania wcsrtombs w przypadku, gdy używana zamiast wcstombs.
Przykład
Konwertuje znaków wielobajtowych do jego szerokości znaku równoważne.
// 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);
}
Przykładowe dane wyjściowe
Locale set to: "French_Canada.1252"
Conversion succeeded!
Multibyte String: AaBbCcÜïα∩≡xXyYzZ
WC String: AaBbCcÜïα∩≡xXyYzZ
Wymagania
Rozpoczęto wykonywanie procedury |
Wymaganego nagłówka |
---|---|
mbrtowc |
<wchar.h> |
Odpowiednik w programie .NET Framework
Nie dotyczy. Aby wywołać standardowych funkcji C, należy użyć PInvoke. Aby uzyskać więcej informacji, zobacz Przykłady wywołać platformy.