función mbrtowc() en C/C++

La función mbrtowc() en C/C++ convierte la secuencia multibyte en caracteres anchos. Esta función devuelve la longitud en bytes de un carácter multibyte. El carácter multibyte señalado por s se convierte en un valor de tipo wchar_t y se almacena en la ubicación señalada por pwc. Si s apunta a un carácter nulo, la función restablece el estado de cambio y devuelve cero después de almacenar el carácter nulo ancho en pwc.

Sintaxis:

size_t mbrtowc (wchar_t* pwc, const char* pmb, size_t max, mbstate_t* ps)

Parámetro: La función acepta cuatro parámetros como se describe a continuación:

  • pwc : puntero a la ubicación donde se escribirá el carácter ancho resultante
  • s: puntero a la string de caracteres multibyte utilizada como entrada
  • n : límite en el número de bytes en s que se pueden examinar
  • ps: puntero al estado de conversión utilizado al interpretar la string multibyte

Valor devuelto: la función devuelve cuatro valores de la siguiente manera:

  1. Si, carácter ancho nulo o si pmb es un puntero nulo, la función devuelve 0
  2. el número de bytes [1…n] del carácter multibyte convertido con éxito de s
  3. Si los primeros caracteres máximos de pmb forman un carácter multibyte incompleto, la función devuelve longitud-2
  4. De lo contrario, la función devuelve longitud-1 y establece errno en EILSEQ

Nota: Ninguno de los valores posiblemente devueltos es menor que cero.

Los siguientes programas ilustran la función anterior:
Programa 1:

// C++ program to illustrate
// mbrtowc() function
#include <bits/stdc++.h>
using namespace std;
  
// Function to convert multibyte
// sequence to wide character
void print_(const char* s)
{
    // initial state
    mbstate_t ps = mbstate_t();
  
    // length of the string
    int length = strlen(s);
  
    const char* n = s + length;
    int len;
    wchar_t pwc;
  
    // printing each bytes
    while ((len = mbrtowc(&pwc, s, n - s, &ps)) > 0) {
        wcout << "Next " << len << 
        " bytes are the character " << pwc << '\n';
        s += len;
    }
}
  
// Driver code
int main()
{
    setlocale(LC_ALL, "en_US.utf8");
  
    // UTF-8 narrow multibyte encoding
    const char* str = u8"z\u00df\u6c34\U0001d10b";
  
    print_(str);
}
Producción:

Next 1 bytes are the character z
Next 2 bytes are the character Ã?
Next 3 bytes are the character æ°´
Next 4 bytes are the character ð??

Programa 2:

// C++ program to illustrate
// mbrtowc() function
// with different UTF-8 characters
#include <bits/stdc++.h>
using namespace std;
  
// Function to convert multibyte
// sequence to wide character
void print_(const char* s)
{
    // initial state
    mbstate_t ps = mbstate_t();
  
    // length of the string
    int length = strlen(s);
  
    const char* n = s + length;
    int len;
    wchar_t pwc;
  
    // printing each bytes
    while ((len = mbrtowc(&pwc, s, n - s, &ps)) > 0) {
        wcout << "Next " << len << 
        " bytes are the character " << pwc << '\n';
        s += len;
    }
}
  
// Driver code
int main()
{
    setlocale(LC_ALL, "en_US.utf8");
  
    // UTF-8 narrow multibyte encoding
    const char* str = u8"\xE2\x88\x83y\xE2\x88\x80x\xC2\xAC";
  
    print_(str);
}
Producción:

Next 3 bytes are the character â??
Next 1 bytes are the character y
Next 3 bytes are the character â??
Next 1 bytes are the character x
Next 2 bytes are the character ¬

Publicación traducida automáticamente

Artículo escrito por AmanSrivastava1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *