Namespaces
Variants

c8rtomb

From cppreference.net
Definido en el encabezado <uchar.h>
size_t c8rtomb ( char * restrict s, char8_t c8, mbstate_t * restrict ps ) ;
(desde C23)

Convierte un único punto de código de UTF-8 a una representación de carácter multibyte estrecho.

Si s no es un puntero nulo y c8 es la última unidad de código en una codificación UTF-8 válida de un punto de código, la función determina el número de bytes necesarios para almacenar la representación del carácter multibyte de ese punto de código (incluyendo cualquier secuencia de desplazamiento, 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 c8 no es la unidad de código UTF-8 final en una representación de un punto de código, la función no escribe en el array apuntado por s , solo se actualiza * ps .

Si s es un puntero nulo, la llamada es equivalente a c8rtomb ( buf, u8 ' \0 ' , ps ) para algún búfer interno buf .

Si c8 es el carácter nulo u8 ' \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.

La codificación multibyte utilizada por esta función está especificada por la configuración regional de C actualmente activa.

Contenidos

Parámetros

s - puntero al arreglo de caracteres estrechos donde se almacenará el carácter multibyte
c8 - la unidad de código UTF-8 a convertir
ps - puntero al objeto de estado de conversión utilizado al interpretar la cadena multibyte

Valor de retorno

El número de bytes almacenados en el objeto array (incluyendo cualquier secuencia de desplazamiento). Esto puede ser cero cuando c8 no es la unidad de código final en la representación UTF-8 de un punto de código.

Si c8 es inválido (no contribuye a una secuencia de char8_t correspondiente a un carácter multibyte válido), el valor de la macro EILSEQ se almacena en errno , ( size_t ) - 1 se retorna, y el estado de conversión no está especificado.

Notas

Las llamadas a c8rtomb con un argumento de puntero nulo para s pueden introducir una condición de carrera con otras llamadas a c8rtomb con un argumento de puntero nulo para s .

Ejemplo

Referencias

  • Estándar C23 (ISO/IEC 9899:2024):
  • 7.30.1.2 The c8rtomb function

Véase también

(C23)
convierte un carácter multibyte estrecho a codificación UTF-8
(función)
C++ documentation para c8rtomb