Функція wcsrtombs () в C ++ перетворює широку послідовність символів у вузьку багатобайтову послідовність символів.
Функція wcsrtombs () визначена у файлі заголовка.
прототип wcsrtombs ()
size_t wcsrtombs (char * dest, const wchar_t ** src, size_t len, mbstate_t * ps);
Функція wcsrtombs () перетворює широкий рядок символів, представлений * src, у відповідний багатобайтовий рядок символів і зберігається в масиві символів, на який вказує dest, якщо dest не має значення null. У дест записується максимум не більше символів.
Процес перетворення подібний до повторного виклику wcrtomb (). Перетворення зупиняється, якщо:
- Широкий нульовий символ був перетворений і збережений. У цьому випадку для src встановлено значення null, а ps представляє початковий стан зсуву.
- Виявлено недійсний широкий символ. У цьому випадку src встановлюється на вказівку початку першого неперетвореного широкого символу.
- len байт було збережено в dest. У цьому випадку src встановлюється таким чином, щоб вказувати на початок першого неперетвореного широкого символу.
Параметри wcsrtombs ()
- > dest: вказівник на масив символів, де зберігається перетворений багатобайтовий символ.
- src: вказівник на вказівник на перший широкий символ для перетворення.
- len: Максимальна кількість байтів, доступних у масиві dest.
- ps: вказівник на об'єкт стану перетворення.
wcsrtombs () Повертається значення
- Після успіху функція wcsrtombs () повертає кількість багатобайтових символів, записаних у dest, виключаючи закінчувальний широкий нульовий символ, але включаючи послідовності зсувів.
Якщо dest є нульовим покажчиком, він повертає кількість широких символів, які було б записано, за винятком закінчувального нульового символу. - При помилці перетворення повертається -1, а errno встановлюється як EILSEQ .
Приклад: Як працює функція 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; )
Коли ви запускаєте програму, результат буде:
Кількість записаних багатобайтових символів (крім " 0") = 8 Багатобайтових символів = ݣݗݿݟ