mbtowc
, _mbtowc_l
Преобразует многобайтовый символ в соответствующий расширенный символ.
Синтаксис
int mbtowc(
wchar_t *wchar,
const char *mbchar,
size_t count
);
int _mbtowc_l(
wchar_t *wchar,
const char *mbchar,
size_t count,
_locale_t locale
);
Параметры
wchar
Адрес расширенного символа (тип wchar_t
).
mbchar
Адрес последовательности байтов (многобайтовый символ).
count
Число проверяемых байтов.
locale
Используемый языковой стандарт.
Возвращаемое значение
Если это не NULL
так, а если mbchar
mbchar
указывает на допустимый многобайтовый символ, mbtowc
возвращает длину в байтах многобайтового символа. Если mbchar
значение равно NULL
или указывает на широкий символ NULL (L'\0), функция возвращает значение 0. Если объект, mbchar
указывающий на то, что он не формирует допустимый многобайтовый символ в первых count
символах, он возвращает значение -1.
Замечания
Функция mbtowc
преобразует или меньше байтов count
, на которые указывает mbchar
, если mbchar
это не NULL
так, в соответствующий широкий символ. mbtowc
сохраняет результирующий широкий символ в wchar, если wchar
это не NULL
так. mbtowc
не проверяет больше MB_CUR_MAX
байтов. Функция mbtowc
использует текущий языковой стандарт для аспектов поведения, обусловленных языковыми стандартами; функция _mbtowc_l
идентична за исключением того, что она использует переданный языковой стандарт. Дополнительные сведения см. в разделе Locale.
По умолчанию глобальное состояние этой функции ограничивается приложением. Чтобы изменить это поведение, см . статью "Глобальное состояние" в CRT.
Требования
Маршрут | Обязательный заголовок |
---|---|
mbtowc |
<stdlib.h> |
_mbtowc_l |
<stdlib.h> |
Дополнительные сведения о совместимости см. в разделе Совместимость.
Библиотеки
Все версии библиотек времени выполнения языка C.
Пример
// crt_mbtowc.c
// Illustrates the behavior of the mbtowc function
#include <stdlib.h>
#include <stdio.h>
int main( void )
{
int i;
char *pmbc = (char *)malloc( sizeof( char ) );
wchar_t wc = L'a';
wchar_t *pwcnull = NULL;
wchar_t *pwc = (wchar_t *)malloc( sizeof( wchar_t ) );
printf( "Convert a wide character to multibyte character:\n" );
wctomb_s( &i, pmbc, sizeof(char), wc );
printf( " Characters converted: %u\n", i );
printf( " Multibyte character: %x\n\n", *pmbc );
printf( "Convert multibyte character back to a wide "
"character:\n" );
i = mbtowc( pwc, pmbc, MB_CUR_MAX );
printf( " Bytes converted: %u\n", i );
printf( " Wide character: %x\n\n", *pwc );
printf( "Attempt to convert when target is NULL\n" );
printf( " returns the length of the multibyte character:\n" );
i = mbtowc( pwcnull, pmbc, MB_CUR_MAX );
printf( " Length of multibyte character: %u\n\n", i );
printf( "Attempt to convert a NULL pointer to a" );
printf( " wide character:\n" );
pmbc = NULL;
i = mbtowc( pwc, pmbc, MB_CUR_MAX );
printf( " Bytes converted: %u\n", i );
}
Convert a wide character to multibyte character:
Characters converted: 1
Multibyte character: 61
Convert multibyte character back to a wide character:
Bytes converted: 1
Wide character: 61
Attempt to convert when target is NULL
returns the length of the multibyte character:
Length of multibyte character: 1
Attempt to convert a NULL pointer to a wide character:
Bytes converted: 0
См. также
Преобразование данных
MultiByteToWideChar
Локаль
Интерпретация последовательностей многобайтовых символов
_mbclen
, , mblen
_mblen_l
wcstombs
, _wcstombs_l
wctomb
, _wctomb_l