Función de la biblioteca C -mbtowc()
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 a
wchar_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: indica
mbstrel 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 <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 <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:
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 un
wchar_tvalor de tipo (en algunas plataformas, de 2 o 4 bytes).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.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.