Función de la biblioteca C -mbtowc()

C 标准库 - <stdlib.h>Biblioteca estándar de C - <stdlib.h>

mbtowc()es una función de la biblioteca estándar de C que se utiliza para convertir caracteres multibyte en caracteres anchos.

mbtowc()La declaración de ... se encuentra en<wchar.h>el archivo de cabecera, principalmente para admitir la conversión entre conjuntos de caracteres multibyte (como UTF-8) y conjuntos de caracteres anchos (como Unicode).

mbtowc()Se utiliza para convertir un carácter multibyte (mbstr) a un carácter ancho (wc). Esta función, según laLC_CTYPEconfiguración regional (configuración del entorno) para decidir cómo interpretar los caracteres multibyte. Si el carácter multibyte es válido, se convierte en un carácter ancho. Si el carácter no es válido, devuelve-1。

Declaración

A continuación se muestra la declaración de la función mbtowc().

#include <wchar.h>

int mbtowc(wchar_t *wc, const char *mbstr, size_t n);

Parámetros:

  • wc: puntero awchar_tuna variable de tipo. Esta variable recibirá el carácter ancho convertido.
  • mbstr: puntero a la cadena multibyte, que es la secuencia de caracteres multibyte a convertir.
  • n: indicambstrel número máximo de bytes de la cadena. Normalmente puedes establecerlo como la longitud de la cadena.

Valor de retorno

  • Si tiene éxito,mbtowc()devuelve el número de bytes que ocupa el carácter convertido (es decir,mbstrel número de bytes del carácter multibyte en ...). Siwcno esNULL, entonces el valor es mayor que 0.
  • Si se encuentra un error (como un carácter multibyte no válido), la función devuelve-1。
  • Si se encuentra el final de la secuencia de caracteres (por ejemplo, al encontrar el carácter de terminación de la cadena\0), devuelve0。

Ejemplo

El siguiente ejemplo demuestra el uso de la función mbtowc().

Ejemplo

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <wchar.h>
#include <locale.h>

int main()
{
    // Establecer la información regional del programa
    setlocale(LC_CTYPE, "");

    // Cadena multibyte
    const char *str = "Aquí está example.com";

    // Matriz de caracteres anchos para almacenar el resultado convertido
    wchar_t mb[100];
   
    // Índice del carácter actual y longitud del carácter ancho convertido
    int i = 0;
    int len;
   
    // Convertir carácter por carácter a caracteres anchos
    while (*str) {
        len = mbtowc(&mb[i], str, MB_CUR_MAX);  // Convertir el carácter multibyte actual
        if (len > 0) {
            str += len;  // Moverse a la posición inicial del siguiente carácter
            i++;  // Almacenar en la matriz de caracteres anchos
        } else if (len == 0) {
            break;  // Se encuentra el terminador de cadena
        } else {
            // Manejo de errores cuando hay un carácter no válido
            printf("Carácter no válido\n");
            break;
        }
    }

    // Mostrar la cadena de caracteres anchos convertida
    wprintf(L"%ls \n", mb);
   
    return 0;
}

Compilemos y ejecutemos el programa anterior; esto producirá el siguiente resultado, porque debe mostrar el resultado en forma multibyte, que es una salida binaria.

这里是 example.com 

Ejemplo

#include <stdio.h>
#include <wchar.h>
#include <locale.h>

int main() {
    // Establecer la información regional del programa
    setlocale(LC_CTYPE, "");

    const char *mbstr = "Hola";
    wchar_t wc;

    // Convertir carácter por carácter
    for (size_t i = 0; mbstr[i] != '\0'; i++) {
        int len = mbtowc(&wc, &mbstr[i], 1);
        if (len > 0) {
            wprintf(L"Carácter ancho convertido: %lc\n", wc);
            i += len - 1;  // Saltar el número de bytes del carácter multibyte actual
        } else if (len == 0) {
            break;
        } else {
            printf("Carácter no válido\n");
        }
    }

    return 0;
}

Explicación:

  1. Conjunto de caracteres multibyte: en un conjunto de caracteres multibyte (como UTF-8), un carácter puede estar compuesto por varios bytes, mientras que un carácter en un conjunto de caracteres anchos (como Unicode) normalmente está representado por unwchar_tvalor de tipo (en algunas plataformas, de 2 o 4 bytes).

  2. Configuración regional:mbtowc()El comportamiento de ... depende de la configuración regional actual del programa, especialmenteLC_CTYPEconfiguración, que determina cómo interpretar el conjunto de caracteres multibyte. Por lo tanto, al usar esta función, generalmente es necesariosetlocale()establecer la configuración regional adecuada.

  3. Manejo de errores: si el formato de la cadena multibyte de entrada no es válido, o no se puede convertir a un carácter ancho,mbtowc()devolverá-1. Es necesario comprobar el valor de retorno para asegurarse de que la conversión se realizó correctamente.

C 标准库 - <stdlib.h>Biblioteca estándar de C - <stdlib.h>

Otras extensiones