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