Этот сайт использует cookies. Продолжение работы с сайтом означает, что Вы согласны!
Преобразование 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);
MultiByteToWideChar()
и WideCharToMultiByte()
. Описание функций приведено в разд. 8.12.Помощь сайту
ЮMoney (Yandex-деньги): 410011140483022
ПАО Сбербанк:
Счет: 40817810855006152256
Реквизиты банка:
Наименование: СЕВЕРО-ЗАПАДНЫЙ БАНК ПАО СБЕРБАНК
Корреспондентский счет: 30101810500000000653
БИК: 044030653
КПП: 784243001
ОКПО: 09171401
ОКОНХ: 96130
Скриншот реквизитов