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