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