Поделиться через


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