Namespaces
Variants

Null-terminated multibyte strings

From cppreference.net

Una cadena multibyte terminada en nulo (NTMBS), o "cadena multibyte", es una secuencia de bytes distintos de cero seguida de un byte con valor cero (el carácter nulo terminador).

Cada carácter almacenado en la cadena puede ocupar más de un byte. La codificación utilizada para representar caracteres en una cadena de caracteres multibyte es específica de la configuración regional: puede ser UTF-8, GB18030, EUC-JP, Shift-JIS, etc. Por ejemplo, el array de caracteres { ' \xe4 ' , ' \xbd ' , ' \xa0 ' , ' \xe5 ' , ' \xa5 ' , ' \xbd ' , ' \0 ' } es un NTMBS que contiene la cadena "你好" en codificación multibyte UTF-8: los primeros tres bytes codifican el carácter 你, los siguientes tres bytes codifican el carácter 好. La misma cadena codificada en GB18030 es el array de caracteres { ' \xc4 ' , ' \xe3 ' , ' \xba ' , ' \xc3 ' , ' \0 ' } , donde cada uno de los dos caracteres se codifica como una secuencia de dos bytes.

En algunas codificaciones multibyte, cualquier secuencia de caracteres multibyte dada puede representar diferentes caracteres dependiendo de las secuencias de bytes anteriores, conocidas como "secuencias de cambio". Tales codificaciones se conocen como dependientes del estado: se requiere conocimiento del estado de cambio actual para interpretar cada carácter. Un NTMBS solo es válido si comienza y termina en el estado de cambio inicial: si se utilizó una secuencia de cambio, la secuencia de desbloqueo correspondiente debe estar presente antes del carácter nulo terminador. Ejemplos de tales codificaciones son BOCU-1 y SCSU .

Una cadena de caracteres multibyte es compatible en diseño con null-terminated byte string (NTBS), es decir, puede ser almacenada, copiada y examinada usando las mismas facilidades, excepto para calcular el número de caracteres. Si la configuración regional correcta está en efecto, las funciones de E/S también manejan cadenas multibyte. Las cadenas multibyte pueden convertirse desde y hacia cadenas anchas usando las siguientes funciones de conversión dependientes de la configuración regional:

Contenidos

Funciones

Conversiones de caracteres multibyte/ancho
Definido en el encabezado <stdlib.h>
devuelve el número de bytes en el siguiente carácter multibyte
(función)
convierte el siguiente carácter multibyte a carácter ancho
(función)
convierte un carácter ancho a su representación multibyte
(función)
convierte una cadena de caracteres multibyte estrecha a cadena ancha
(función)
convierte una cadena ancha en una cadena de caracteres multibyte estrecha
(función)
Definido en el encabezado <wchar.h>
(C95)
verifica si el objeto mbstate_t representa el estado de desplazamiento inicial
(función)
(C95)
amplía un carácter estrecho de un solo byte a carácter ancho, si es posible
(función)
(C95)
reduce un carácter ancho a un carácter estrecho de un solo byte, si es posible
(función)
(C95)
devuelve el número de bytes en el siguiente carácter multibyte, dado el estado
(función)
(C95)
convierte el siguiente carácter multibyte a carácter ancho, dado el estado
(función)
convierte un carácter ancho a su representación multibyte, dado un estado
(función)
convierte una cadena de caracteres multibyte estrecha a cadena ancha, dado el estado
(función)
convierte una cadena de caracteres anchos a una cadena de caracteres multibyte estrecha, dado un estado
(función)
Definido en el encabezado <uchar.h>
(C23)
convierte un carácter multibyte estrecho a codificación UTF-8
(función)
(C23)
convierte cadena UTF-8 a codificación multibyte estrecha
(función)
convierte un carácter multibyte estrecho a codificación UTF-16
(función)
convierte un carácter UTF-16 a codificación multibyte estrecha
(función)
convierte un carácter multibyte estrecho a codificación UTF-32
(función)
convierte un carácter UTF-32 a codificación multibyte estrecha
(función)

Tipos

Definido en el encabezado <uchar.h>
Definido en el encabezado <wchar.h>
información de estado de conversión necesaria para iterar cadenas de caracteres multibyte
(clase)
Definido en el encabezado <uchar.h>
(C23)
tipo de carácter de 8 bits
(typedef)
tipo de carácter de 16 bits
(typedef)
tipo de carácter de 32 bits
(typedef)

Macros

Definido en el encabezado <limits.h>
MB_LEN_MAX
número máximo de bytes en un carácter multibyte, para cualquier configuración regional admitida
(macro constante)
Definido en el encabezado <stdlib.h>
MB_CUR_MAX
número máximo de bytes en un carácter multibyte, en la configuración regional actual
(macro variable)

Referencias

  • Estándar C23 (ISO/IEC 9899:2024):
  • 7.10 Tamaños de tipos enteros <limits.h> (p: TBD)
  • 7.22 Utilidades generales <stdlib.h> (p: TBD)
  • 7.28 Utilidades Unicode <uchar.h> (p: TBD)
  • 7.29 Utilidades extendidas de caracteres multibyte y anchos <wchar.h> (p: TBD)
  • 7.31.12 Utilidades generales <stdlib.h> (p: TBD)
  • 7.31.16 Utilidades extendidas de caracteres multibyte y anchos <wchar.h> (p: TBD)
  • K.3.6 Utilidades generales <stdlib.h> (p: TBD)
  • K.3.9 Utilidades extendidas de caracteres multibyte y anchos <wchar.h> (p: TBD)
  • Estándar C17 (ISO/IEC 9899:2018):
  • 7.10 Tamaños de tipos enteros <limits.h> (p: TBD)
  • 7.22 Utilidades generales <stdlib.h> (p: TBD)
  • 7.28 Utilidades Unicode <uchar.h> (p: TBD)
  • 7.29 Utilidades extendidas de caracteres multibyte y anchos <wchar.h> (p: TBD)
  • 7.31.12 Utilidades generales <stdlib.h> (p: TBD)
  • 7.31.16 Utilidades extendidas de caracteres multibyte y anchos <wchar.h> (p: TBD)
  • K.3.6 Utilidades generales <stdlib.h> (p: TBD)
  • K.3.9 Utilidades extendidas de caracteres multibyte y anchos <wchar.h> (p: TBD)
  • Estándar C11 (ISO/IEC 9899:2011):
  • 7.10 Tamaños de tipos enteros <limits.h> (p: 222)
  • 7.22 Utilidades generales <stdlib.h> (p: 340-360)
  • 7.28 Utilidades Unicode <uchar.h> (p: 398-401)
  • 7.29 Utilidades extendidas de caracteres multibyte y anchos <wchar.h> (p: 402-446)
  • 7.31.12 Utilidades generales <stdlib.h> (p: 456)
  • 7.31.16 Utilidades extendidas de caracteres multibyte y anchos <wchar.h> (p: 456)
  • K.3.6 Utilidades generales <stdlib.h> (p: 604-614)
  • K.3.9 Utilidades extendidas de caracteres multibyte y anchos <wchar.h> (p: 627-651)
  • Estándar C99 (ISO/IEC 9899:1999):
  • 7.10 Tamaños de tipos enteros <limits.h> (p: 203)
  • 7.20 Utilidades generales <stdlib.h> (p: 306-324)
  • 7.24 Utilidades extendidas de caracteres multibyte y anchos <wchar.h> (p: 348-392)
  • 7.26.10 Utilidades generales <stdlib.h> (p: 402)
  • 7.26.12 Utilidades extendidas de caracteres multibyte y anchos <wchar.h> (p: 402)
  • Estándar C89/C90 (ISO/IEC 9899:1990):
  • 4.1.4 Límites <float.h> y <limits.h>
  • 4.10 UTILIDADES GENERALES <stdlib.h>
  • 4.13.7 Utilidades generales <stdlib.h>

Véase también

Documentación de C++ para Cadenas multibyte terminadas en nulo