mbrtowc
|
Definido en el encabezado
<wchar.h>
|
||
| (desde C95) | ||
| (desde C99) | ||
Convierte un carácter multibyte estrecho a su representación de carácter ancho.
Si
s
no es un puntero nulo, inspecciona como máximo
n
bytes de la cadena de caracteres multibyte, comenzando desde el byte apuntado por
s
para determinar el número de bytes necesarios para completar el siguiente carácter multibyte (incluyendo cualquier secuencia de desplazamiento, y teniendo en cuenta el estado actual de conversión multibyte
*
ps
). Si la función determina que el siguiente carácter multibyte en
s
está completo y es válido, lo convierte al carácter ancho correspondiente y lo almacena en
*
pwc
(si
pwc
no es nulo).
Si
s
es un puntero nulo, los valores de
n
y
pwc
se ignoran y la llamada es equivalente a
mbrtowc
(
NULL
,
""
,
1
, ps
)
.
Si el carácter ancho producido es el carácter nulo, el estado de conversión almacenado en * ps es el estado de desplazamiento inicial.
Si la macro del entorno __STDC_ISO_10646__ está definida, los valores del tipo wchar_t son iguales a los identificadores cortos de los caracteres en el conjunto requerido de Unicode (normalmente codificación UTF-32); de lo contrario, está definido por la implementación. En cualquier caso, la codificación de caracteres multibyte utilizada por esta función está especificada por la configuración regional de C actualmente activa.
Contenidos |
Parámetros
| pwc | - | puntero a la ubicación donde se escribirá el carácter ancho resultante |
| s | - | puntero a la cadena de caracteres multibyte utilizada como entrada |
| n | - | límite en el número de bytes en s que pueden ser examinados |
| ps | - | puntero al estado de conversión utilizado al interpretar la cadena de caracteres multibyte |
Valor de retorno
La primera de las siguientes que aplique:
-
0
si el carácter convertido desde
s(y almacenado en pwc si no es nulo) era el carácter nulo -
el número de bytes
[
1
...
n
]
del carácter multibyte convertido exitosamente desde
s -
(
size_t
)
-
2
si los siguientes
nbytes constituyen un carácter multibyte incompleto, pero válido hasta el momento. No se escribe nada en * pwc . -
(
size_t
)
-
1
si ocurre un error de codificación. No se escribe nada en
*pwc, el valor EILSEQ se almacena en errno y el valor de * ps queda sin especificar.
Ejemplo
#include <stdio.h> #include <locale.h> #include <string.h> #include <wchar.h> int main(void) { setlocale(LC_ALL, "en_US.utf8"); mbstate_t state; memset(&state, 0, sizeof state); char in[] = u8"z\u00df\u6c34\U0001F34C"; // or u8"zß水🍌" size_t in_sz = sizeof in / sizeof *in; printf("Processing %zu UTF-8 code units: [ ", in_sz); for(size_t n = 0; n < in_sz; ++n) printf("%#x ", (unsigned char)in[n]); puts("]"); wchar_t out[in_sz]; char *p_in = in, *end = in + in_sz; wchar_t *p_out = out; int rc; while((rc = mbrtowc(p_out, p_in, end - p_in, &state)) > 0) { p_in += rc; p_out += 1; } size_t out_sz = p_out - out + 1; printf("into %zu wchar_t units: [ ", out_sz); for(size_t x = 0; x < out_sz; ++x) printf("%#x ", out[x]); puts("]"); }
Salida:
Processing 11 UTF-8 code units: [ 0x7a 0xc3 0x9f 0xe6 0xb0 0xb4 0xf0 0x9f 0x8d 0x8c 0 ] into 5 wchar_t units: [ 0x7a 0xdf 0x6c34 0x1f34c 0 ]
Referencias
- Estándar C11 (ISO/IEC 9899:2011):
-
- 7.29.6.3.2 La función mbrtowc (p: 443)
- Estándar C99 (ISO/IEC 9899:1999):
-
- 7.24.6.3.2 La función mbrtowc (p: 389)
Véase también
|
convierte el siguiente carácter multibyte a carácter ancho
(función) |
|
|
(C95)
(C11)
|
convierte un carácter ancho a su representación multibyte, dado el estado
(función) |
|
Documentación de C++
para
mbrtowc
|
|