mbrtowc
div
EOF
TOC
Collapse the table of content
Expand the table of content
Este artículo se tradujo automáticamente. Para ver el artículo en inglés, active la casilla Inglés. Además, puede mostrar el texto en inglés en una ventana emergente si mueve el puntero del mouse sobre el texto.
Traducción
Inglés

mbrtowc

Convierte un carácter multibyte en el carácter ancho equivalente.

size_t mbrtowc(
   wchar_t *wchar,
   const char *mbchar,
   size_t count,
   mbstate_t mbstate
);

wchar

Dirección de un carácter ancho para recibir la cadena de caracteres anchos convierte (tipo wchar_t). Este valor puede ser NULL si no se requiere ningún carácter ancho return.

mbchar

Dirección de una secuencia de bytes (un carácter multibyte).

count

Número de bytes que se va a comprobar.

mbstate

Estado de conversión. Si este valor es NULL, se utiliza una categoría del estado de la conversión interna.

0

Si count siguiente bytes o menos completa el carácter multibyte que representa el carácter ancho de NULL .

> 0

Si count siguiente bytes o menos completa un carácter válido multibyte, el valor devuelto es el número de bytes que se complete el carácter multibyte.

-1

Si un error de codificación aparece, en este caso count siguiente o menos bytes no contribuye al carácter completo válido y multibyte, el valor de errno se EILSEQ y el estado de conversión ambigua.

-2

Si los bytes siguientes de count contribuyen a un multibyte incompleto y todos los bytes del recuento se han procesado.

Si wchares un valor null, la función es equivalente a la llamada:

mbrtowc(NULL, NULL, 1, mbstate)

en este caso, el valor de los argumentos wchar y count se omiten.

Si wchar no es NULL, la función examina los bytes de count de mbcharpara determinar el número de bytes necesario necesarios para completar el siguiente carácter multibyte. Si el carácter siguiente es válido, el carácter correspondiente multibyte se almacena en wchar si no es NULL. Si el carácter es el carácter NULL ancho correspondiente, el estado resultante es el estado inicial de la conversión.

la función de mbrtowc diferencia de mbtowc, _mbtowc_l por su restartability. Almacena el estado de la conversión en mbstate para las llamadas subsiguientes igual o a otras funciones reiniciables. Los resultados son indefinidos al mezclar el uso de funciones reiniciables y nonrestartable. Por ejemplo, una aplicación utilizaría wcsrlen en lugar de wcslen, si una llamada subsiguiente a wcsrtombs donde se utiliza en lugar de wcstombs.

Convierte un carácter multibyte en su equivalente de caracteres anchos.

// 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

rutina

Encabezado necesario

mbrtowc

<wchar.h>

No es aplicable Para llamar a la función estándar de C, utilice PInvoke. Para obtener más información, vea La invocación de plataforma ejemplos.

Adiciones de comunidad

AGREGAR
Mostrar:
© 2016 Microsoft