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