std:: wcrtomb
|
Definido en el encabezado
<cwchar>
|
||
|
std::
size_t
wcrtomb
(
char
*
s,
wchar_t
wc,
std::
mbstate_t
*
ps
)
;
|
||
Convierte un carácter ancho a su representación multibyte estrecha.
Si s no es un puntero nulo, la función determina el número de bytes necesarios para almacenar la representación del carácter multibyte de wc (incluyendo cualquier secuencia de cambio, y teniendo en cuenta el estado actual de conversión multibyte * ps ), y almacena la representación del carácter multibyte en el arreglo de caracteres cuyo primer elemento está apuntado por s , actualizando * ps según sea necesario. Como máximo MB_CUR_MAX bytes pueden ser escritos por esta función.
Si
s
es un puntero nulo, la llamada es equivalente a
std
::
wcrtomb
(
buf, L
'
\0
'
, ps
)
para algún búfer interno
buf
.
Si wc es el carácter ancho nulo L ' \0 ' , se almacena un byte nulo, precedido por cualquier secuencia de cambio necesaria para restaurar el estado de cambio inicial y el parámetro de estado de conversión * ps se actualiza para representar el estado de cambio inicial.
Contenidos |
Parámetros
| s | - | puntero al array de caracteres estrechos donde se almacenará el carácter multibyte |
| wc | - | el carácter ancho a convertir |
| ps | - | puntero al objeto de estado de conversión utilizado al interpretar la cadena multibyte |
Valor de retorno
En caso de éxito, retorna el número de bytes (incluyendo cualquier secuencia de desplazamiento) escritos en el arreglo de caracteres cuyo primer elemento está apuntado por s .
En caso de fallo (si wc no es un carácter ancho válido), retorna static_cast < std:: size_t > ( - 1 ) , almacena EILSEQ en errno , y deja * ps en un estado no especificado.
Ejemplo
#include <clocale> #include <cwchar> #include <iostream> #include <string> void print_wide(const std::wstring& wstr) { std::mbstate_t state{}; for (wchar_t wc : wstr) { std::string mb(MB_CUR_MAX, '\0'); std::size_t ret = std::wcrtomb(&mb[0], wc, &state); std::cout << "multibyte char " << mb << " is " << ret << " bytes\n"; } } int main() { std::setlocale(LC_ALL, "en_US.utf8"); std::wstring wstr = L"z\u00df\u6c34\U0001f34c"; // or L"zß水🍌" print_wide(wstr); }
Salida:
multibyte char z is 1 bytes multibyte char ß is 2 bytes multibyte char 水 is 3 bytes multibyte char 🍌 is 4 bytes
Véase también
|
convierte un carácter ancho a su representación multibyte
(función) |
|
|
convierte el siguiente carácter multibyte a carácter ancho, dado un estado
(función) |
|
|
[virtual]
|
convierte una cadena de
InternT
a
ExternT
, como al escribir a archivo
(función miembro protegida virtual de
std::codecvt<InternT,ExternT,StateT>
)
|
|
Documentación de C
para
wcrtomb
|
|