A função mbsrtowcs () em C ++ converte uma seqüência de caracteres multibyte estreita em uma seqüência de caracteres ampla (do tipo wchar_t).
A função mbsrtowcs () é definida no arquivo de cabeçalho.
protótipo mbsrtowcs ()
size_t mbsrtowcs (wchar_t * dest, const char ** src, size_t len, mbstate_t * ps);
A função mbsrtowcs () converte a string de caracteres multibyte cujo primeiro byte é representado por * src na representação ampla de caracteres correspondente e é armazenada na ampla matriz de caracteres apontada por dest. Um máximo de caracteres de largura inteira são gravados em dest.
O processo de conversão é semelhante a chamar mbrtowc () repetidamente. A conversão para se:
- Um caractere nulo multibyte foi convertido e armazenado. Nesse caso, src é definido como nulo e ps representa o estado de deslocamento inicial.
- Um caractere multibyte inválido foi encontrado. Nesse caso, src é definido para apontar o início do primeiro caractere multibyte não convertido.
- o caractere largo foi armazenado em dest. Nesse caso, src é definido para apontar o início do primeiro caractere multibyte não convertido.
Parâmetros mbsrtowcs ()
- dest: Ponteiro para a matriz onde o caractere largo convertido está armazenado.
- src: Ponteiro para apontar para o primeiro caractere multibyte a ser convertido.
- len: Número máximo de caracteres largos para armazenar.
- ps: Ponteiro para o estado de conversão usado ao interpretar a string multibyte
mbsrtowcs () Valor de retorno
- Em caso de sucesso, a função mbsrtowcs () retorna o número de caracteres largos gravados em dest, excluindo o caractere nulo largo de terminação. Se dest for um ponteiro nulo, ele retorna o número de caracteres largos que teriam sido escritos considerando o comprimento ilimitado.
- Em caso de erro de conversão, -1 é retornado e errno é definido como EILSEQ .
Exemplo: Como funciona a função mbsrtowcs ()?
#include #include #include using namespace std; int main() ( setlocale(LC_ALL, "en_US.utf8"); const char* str = "u0763u0757u077fu075f"; wchar_t wstr(20); mbstate_t ps = mbstate_t(); int len = 10; int retVal; retVal = mbsrtowcs(wstr, &str, len, &ps); wcout << L"Number of wide characters written (excluding L "\0 ") = " << retVal << endl; wcout << L"Wide character = " << wstr << endl; return 0; )
Quando você executa o programa, a saída será:
Número de caracteres largos escritos (excluindo L " 0") = 4 caracteres largos = ݣݗݿݟ