Функцията mbsrtowcs () в C ++ преобразува тясна многобайтова последователност от символи в широка последователност от символи (от тип wchar_t).
Функцията mbsrtowcs () е дефинирана в заглавния файл.
mbsrtowcs () прототип
size_t mbsrtowcs (wchar_t * dest, const char ** src, size_t len, mbstate_t * ps);
Функцията mbsrtowcs () преобразува многобайтовия символен низ, чийто първи байт е представен от * src, в съответстващо широко символно представяне и се съхранява в широкия масив от символи, посочен от dest. В dest се записват максимум символи с дължина len.
Процесът на преобразуване е подобен на извикването на 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 Широк знак = ݣݗݿݟ