Преобразование широких символов в обычные и наоборот

Для преобразования широких символов (тип wchar_t) в обычные (тип char) и наоборот предназначены две функции:

  • btowc() — преобразует обычный символ в широкий. В случае ошибки функция возвращает значение макроопределения WEOF (65 535). Прототип функции:
#include <cwchar> /* или #include <wchar.h> */
wint_t btowc(int ch);
#define WEOF (wint_t)(0xFFFF)

Пример:

std::setlocale(LC_ALL, "Russian_Russia.1251");
char ch = 'п';
wchar_t wch = std::btowc((unsigned char)ch);
std::wcout << wch << std::endl; // п
  • wctob() — преобразует широкий символ в обычный. В случае ошибки функция возвращает значение –1. Обратите внимание: значение –1 также соответствует букве «я» в кодировке windows-1251. В VC++ дополнительно устанавливается errno соответствующим значению EILSEQ (равно 42). В MinGW errno не устанавливается. Прототип функции:
#include <cwchar> /* или #include <wchar.h> */
int wctob(wint_t ch);
#include <errno.h>
#define EILSEQ 42

Пример:

std::setlocale(LC_ALL, "Russian_Russia.1251");
wchar_t wch = L'п';
char ch = (char)std::wctob(wch);
std::cout << ch << std::endl;          // п
std::cout << errno << std::endl;       // 0
int result = std::wctob(L'\u01CB');
std::cout << result << std::endl;      // -1
std::cout << errno << std::endl;       // В MinGW: 0; в VC++: 42

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

Помощь сайту

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

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