mbrtowc
멀티 바이트 문자에 해당 하는 넓은 문자를 변환 합니다.
size_t mbrtowc(
wchar_t *wchar,
const char *mbchar,
size_t count,
mbstate_t mbstate
);
매개 변수
wchar
와이드 문자를 와이드 문자로 변환 된 문자열을 받는 주소 (형식 wchar_t).이 값이 될 수 있습니다 NULL 반환 없는 와이드 문자 필요한 경우.mbchar
주소 (멀티 바이트 문자) 바이트 시퀀스입니다.count
바이트 수를 확인 합니다.mbstate
변환 상태입니다.이 값이 NULL 인 경우에 내부 변환 상태 범주 사용 됩니다.
반환 값
0
경우 다음 count 또는 멀티 바이트 문자를 나타내는 바이트 수가 완료는 NULL 와이드 문자입니다.> 0
경우 다음 count 또는 유효한 멀티 바이트 문자 바이트 수가 완료, 멀티 바이트 문자를 완성 하는 바이트 수를 반환 하는 값입니다.-1
인코딩 오류가 발생 하는 경우 다음 경우 count 또는 바이트 수가 완전 하 고 유효한 멀티 바이트 문자에 영향을 주지 않습니다, errno 값 EILSEQ 및 모호한 변환 상태가 됩니다.-2
경우 다음 count 기여는 불완전 한 멀티 바이트 및 count 바이트를 모두 처리 한.
설명
경우 wcharNULL 인 값을 함수는 호출에 해당 하는:
mbrtowc(NULL, NULL, 1, mbstate)
이 경우에 인수 값 wchar 및 count 는 무시 됩니다.
경우 wchar NULL,이 함수를 검사 하 여 count 바이트에서 mbchar필요한 다음 멀티 바이트 문자를 완료 하는 데 필요한 바이트 수를 결정 합니다.다음 문자를 사용할 수 있으면 해당 멀티 바이트 문자 저장 됩니다 wchar NULL이 아닌 경우.해당 와이드 NULL 문자인 경우 결과 상태 변환 초기 상태가입니다.
mbrtowc 다른 함수에서 mbtowc, _mbtowc_l 를 재시작 하면 됩니다.변환 상태 저장 됩니다 mbstate 같은 또는 다른 다시 시작 함수 호출에 대 한.혼합 가지가 함수를 사용 하는 경우 결과가 정의 되지 않습니다.예를 들어, 응용 프로그램 사용 wcsrlen 대신 wcslen, 후속 호출 하는 경우 wcsrtombs 대신 사용 하는 wcstombs.
예제
멀티 바이트 문자를 해당 해당 와이드 문자를 변환합니다.
// 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);
}
샘플 출력
Locale set to: "French_Canada.1252"
Conversion succeeded!
Multibyte String: AaBbCcÜïα∩≡xXyYzZ
WC String: AaBbCcÜïα∩≡xXyYzZ
요구 사항
루틴 |
필수 헤더 |
---|---|
mbrtowc |
<wchar.h> |
해당 .NET Framework 항목
해당 사항 없음. 표준 C 함수를 호출할 수 있습니다 PInvoke. 자세한 내용은 플랫폼 호출 예제.