Преобразование C-строки в L-строку и наоборот

Для преобразования C-строки в L-строку и наоборот предназначены две функции:

  • mbstowcs() — преобразует C-строку source в L-строку dest. Кодировка символов C-строки указывается с помощью локали. Прототип функции:
#include <cstdlib> /* или #include <stdlib.h> */
size_t mbstowcs(wchar_t *dest, const char *source,
                size_t maxCount);

В параметре maxCount задается максимальное количество преобразуемых символов. Чтобы узнать требуемое количество символов нужно передать в параметре dest нулевой указатель. Функция возвращает количество записанных символов или код ошибки (size_t)(–1). Пример:

_wsetlocale(LC_ALL, L"Russian_Russia.1251");
wchar_t wstr[256] = {0};
char str[] = "строка";
size_t count = 0;
// Узнаем требуемый размер wstr
count = std::mbstowcs(nullptr, str, 0);
std::wcout << count << L" + 1" << std::endl;     // 6 + 1
count = std::mbstowcs(wstr, str, 255);
std::wcout << L"count = " << count << std::endl; // count = 6
std::wcout << wstr << std::endl;                 // строка

Вместо функции mbstowcs() можно воспользоваться функцией mbstowcs_s(). Прототип функции:

#include <cstdlib> /* или #include <stdlib.h> */
errno_t mbstowcs_s(size_t *returnValue, wchar_t *dest,
                   size_t sizeInWords, const char *source,
                   size_t maxCount);
  • wcstombs() — преобразует L-строку source в C-строку dest. Требуемая кодировка C-строки указывается с помощью локали. Прототип функции:
#include <cstdlib> /* или #include <stdlib.h> */
size_t wcstombs(char *dest, const wchar_t *source,
                size_t maxCount);

В параметре maxCount задается максимальное количество символов строки dest. Чтобы узнать требуемое количество символов нужно передать в параметре dest нулевой указатель. Функция возвращает количество записанных байтов или код ошибки (size_t)(–1). Пример:

_wsetlocale(LC_ALL, L"Russian_Russia.1251");
wchar_t wstr[] = L"строка";
char str[256] = {0};
size_t count = 0;
// Узнаем требуемый размер str
count = std::wcstombs(nullptr, wstr, 0);
std::cout << count << " + 1" << std::endl;     // 6 + 1
count = std::wcstombs(str, wstr, 255);
std::cout << "count = " << count << std::endl; // count = 6
std::cout << str << std::endl;                 // строка

Вместо функции wcstombs() можно воспользоваться функцией wcstombs_s(). Прототип функции:

#include <cstdlib> /* или #include <stdlib.h> */
errno_t wcstombs_s(size_t *returnValue, char *dest,
                   size_t destSizeInBytes, const wchar_t *source,
                   size_t maxCount);
Примечание

Учебник C++ (MinGW-W64)
Учебник C++ (MinGW-W64) в формате PDF

Помощь сайту

ЮMoney (Yandex-деньги): 410011140483022

ПАО Сбербанк:
Счет: 40817810855006152256
Реквизиты банка:
Наименование: СЕВЕРО-ЗАПАДНЫЙ БАНК ПАО СБЕРБАНК
Корреспондентский счет: 30101810500000000653
БИК: 044030653
КПП: 784243001
ОКПО: 09171401
ОКОНХ: 96130
Скриншот реквизитов