std:: mbrlen
|
Definido en el encabezado
<cwchar>
|
||
|
std::
size_t
mbrlen
(
const
char
*
s,
std::
size_t
n,
std::
mbstate_t
*
ps
)
;
|
||
Determina el tamaño, en bytes, del resto del carácter multibyte cuyo primer byte está apuntado por s , dado el estado de conversión actual ps .
Esta función es equivalente a la llamada std:: mbrtowc ( nullptr, s, n, ps ? ps : & internal ) para algún objeto oculto internal de tipo std::mbstate_t , excepto que la expresión ps se evalúa solo una vez.
Contenidos |
Parámetros
| s | - | puntero a un elemento de una cadena de caracteres multibyte |
| n | - | límite en el número de bytes en s que pueden ser examinados |
| ps | - | puntero a la variable que contiene el estado de conversión |
Valor de retorno
- 0 si los siguientes n bytes o menos completan el carácter nulo.
- El número de bytes (entre 1 y n ) que completan un carácter multibyte válido.
- std:: size_t ( - 1 ) si ocurre un error de codificación.
- std:: size_t ( - 2 ) si los siguientes n bytes son parte de un carácter multibyte posiblemente válido, que aún está incompleto después de examinar todos los n bytes.
Ejemplo
#include <clocale> #include <cwchar> #include <iostream> #include <string> int main() { // permitir que mbrlen() funcione con codificación multibyte UTF-8 std::setlocale(LC_ALL, "en_US.utf8"); // codificación multibyte estrecha UTF-8 std::string str = "水"; // or u8"\u6c34" or "\xe6\xb0\xb4" std::mbstate_t mb = std::mbstate_t(); // uso simple: longitud de un carácter multibyte completo const std::size_t len = std::mbrlen(&str[0], str.size(), &mb); std::cout << "La longitud de " << str << " es " << len << " bytes\n"; // uso avanzado: reinicio en medio de un carácter multibyte const std::size_t len1 = std::mbrlen(&str[0], 1, &mb); if (len1 == std::size_t(-2)) std::cout << "El primer byte de " << str << " es un carácter multibyte incompleto (mbrlen retorna -2)\n"; const std::size_t len2 = std::mbrlen(&str[1], str.size() - 1, &mb); std::cout << "Los " << str.size() - 1 << " bytes restantes de " << str << " contienen " << len2 << " bytes del carácter multibyte\n"; // caso de error: std::cout << "Intentar llamar a mbrlen() en medio de " << str << " mientras está en estado de desplazamiento inicial retorna " << (int)mbrlen(&str[1], str.size(), &mb) << '\n'; }
Salida:
La longitud de 水 es 3 bytes. El primer byte de 水 es un carácter multibyte incompleto (mbrlen retorna -2) Los 2 bytes restantes de 水 contienen 2 bytes del carácter multibyte Intentar llamar a mbrlen() en medio de 水 mientras está en estado de desplazamiento inicial retorna -1
Véase también
|
convierte el siguiente carácter multibyte a carácter ancho, dado el estado
(función) |
|
|
devuelve el número de bytes en el siguiente carácter multibyte
(función) |
|
|
[virtual]
|
calcula la longitud de la cadena
ExternT
que sería consumida por conversión al búfer
InternT
dado
(función miembro protegida virtual de
std::codecvt<InternT,ExternT,StateT>
)
|
|
Documentación de C
para
mbrlen
|
|