Форум программистов, компьютерный форум, киберфорум
C/C++: WinAPI
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/18: Рейтинг темы: голосов - 18, средняя оценка - 4.50
0 / 0 / 0
Регистрация: 19.11.2012
Сообщений: 15

char и wchar_t

29.04.2013, 23:28. Показов 3731. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте! Помогите разобраться вот в чем.
Допустим у меня есть Edit Control с которого мне нужно забрать текст. GetWindowText запишет мне в TCHAR буфер содержимое Edita. Так как в настройках проекта кодировка стоит Unicode TCHAR будет являться wchar_t. После этого полученную строку мне нужно передать в функцию, принимающую только char. Так вот, каким образом сконвертить строку из полученного wchar_t в char?
Нагуглил WideCharToMultiByte, но как ей именно пользоваться?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
29.04.2013, 23:28
Ответы с готовыми решениями:

Ошибка: "cannot conver 'char * to 'const wchar_t*"
Доброго дня!Есть такая функция для ограничения запуска, в с++6 работает а в 10 ругается на cannot conver 'char * to 'const wchar_t* ...

Не выходит реализовать wchar_t * -> LONG_PTR -> wchar_t *
как сделать чтобы в строку aa скопировать данные? непойму что я дедаю неправильно wchar_t * aa = (wchar_t *)malloc(500); wchar_t * bb...

Wchar_t to char
я тут обнаружил любопытнейшую вещь, оказывается можно просто присваивать char = wchar_t и наоборот ! просто хочу убедиться это как бы без...

11
22 / 7 / 2
Регистрация: 15.10.2012
Сообщений: 33
30.04.2013, 01:05
sprintf(char, "%S", wchar); из wchar в char
1
0 / 0 / 0
Регистрация: 19.11.2012
Сообщений: 15
30.04.2013, 01:33  [ТС]
sprintf, к сожалению, не воспринимает кириллицу. Есть ли еще варианты?
0
Исследователь
 Аватар для GrayWolf
318 / 317 / 24
Регистрация: 06.04.2011
Сообщений: 872
30.04.2013, 02:38
Примерно так:
C++ (Qt)
1
2
3
wchar_t wszbuf[MAXBYTE];
char szbuf[MAXBYTE];
WideCharToMultiByte(CP_ACP, 0, wszbuf, -1, szbuf, MAXBYTE, NULL, NULL);
где:
- CP_ACP - требуемая кодировка (в данном случае, Windows);
- wsbuf - символьный массив из wchar;
- -1 - длина строки (в данном случае, вся строка);
- szbuf - символьный массив из char;
- MAXBYTE - размер буфера-приемника.
Остальные параметры не критичны, насколько я помню.
1
0 / 0 / 0
Регистрация: 19.11.2012
Сообщений: 15
30.04.2013, 08:39  [ТС]
GrayWolf, большое спасибо!
0
Ушел с форума
Эксперт С++
 Аватар для Убежденный
16481 / 7444 / 1187
Регистрация: 02.05.2013
Сообщений: 11,616
Записей в блоге: 1
02.05.2013, 19:19
Зачем конвертить ?
Вызовите GetWindowTextA и сразу получите строку в нужной кодировке.
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33371 / 21497 / 8234
Регистрация: 22.10.2011
Сообщений: 36,893
Записей в блоге: 12
02.05.2013, 19:49
Цитата Сообщение от Убежденный Посмотреть сообщение
сразу получите строку в нужной кодировке
Нужной кому? Кто будет определять, какая кодировка на данный момент мне нужна? То, что выбрано как кодировка для NonUnicode Applications? А там что, обязана быть 1251? Вот поэтому и программы такие пишутся, что вы все время решаете за пользователя, какая должна быть настройка у него. Не пойдет, у меня выставлено 1255, и если я вызову GetWindowTextA (и в edit введен кириллический текст) - я получаю вопросики. А если сконвертирую строку через WideCharToMultiByte(1251, ...) - то получу кракозябры. Лично я предпочитаю получить кракозябры, а не вопросики...
0
Ушел с форума
Эксперт С++
 Аватар для Убежденный
16481 / 7444 / 1187
Регистрация: 02.05.2013
Сообщений: 11,616
Записей в блоге: 1
02.05.2013, 19:59
Я ответил на вопрос ровно в той степени детализации, в которой он был задан - "wchar_t - char".
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
03.05.2013, 16:53
На всякий случай ссылка по теме: Чем сконвертировать в русский язык такие крякозябры?

Цитата Сообщение от Убежденный Посмотреть сообщение
Я ответил на вопрос ровно в той степени детализации, в которой он был задан - "wchar_t - char"
Очевидно же, что автор поставил вопрос в такой форме в меру тех знаний, которые у него имеются по данному вопросу
0
Ушел с форума
Эксперт С++
 Аватар для Убежденный
16481 / 7444 / 1187
Регистрация: 02.05.2013
Сообщений: 11,616
Записей в блоге: 1
03.05.2013, 17:51
Попробую исправиться.

На вопрос автора нельзя дать однозначно утвердительного ответа.
Все зависит от того, текст в какой кодировке ожидает на вход char-функция.
Если это UTF-8, тогда забираем текст из edit control в "широких символах" (GetWindowTextW) и
конвертируем его в UTF-8 с помощью все той же WideCharToMultiByte. Так будет работать.
Если же это какая-нибудь ISO-8859-5 или другая национальная кодировка, тогда все
зависит от содержимого edit control, от того, можно ли преобразовать его текст в эту
кодировку. Например, если в edit control текст на арабском, тогда ничего не выйдет,
так как в соответствующей кодовой странице просто отсутствуют нужные символы и
WideCharToMultiByte здесь нам ничем не поможет.
0
Исследователь
 Аватар для GrayWolf
318 / 317 / 24
Регистрация: 06.04.2011
Сообщений: 872
04.05.2013, 10:16
Читаем описание WideCharToMultiByte:
CP_ACP
The system default Windows ANSI code page.
Note This value can be different on different computers, even on the same network. It can be changed on the same computer, leading to stored data becoming irrecoverably corrupted. This value is only intended for temporary use and permanent storage should use UTF-16 or UTF-8 if possible.
Если интерпретировать это на "нормальный" язык, то получим, что по умолчанию в ОС используется ANSI кодировка, которая поддерживает большинство используемых языков, т.е. практически не зависит от них. НО! Есть языки, использующие слишком специфические символы (тот же арабский, например, или японский) и для их хранения используется уже UTF-8 (-16). К этой же ситуации относятся системы с нестандартными настройками.
Делаем вывод, что вышеуказанная функция, можно сказать, является "панацеей" Ибо всех "нестандартных" ситуаций не предусмотришь.
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
04.05.2013, 11:29
Цитата Сообщение от GrayWolf Посмотреть сообщение
Делаем вывод, что вышеуказанная функция, можно сказать, является "панацеей" Ибо всех "нестандартных" ситуаций не предусмотришь.
Все нестандартные ситуации предполагается кодировать в параметре CodePage. Когда windows начнёт поступать в Гондурас, то они добавят поддержку кодовой страницы для Гондураса. И так далее. Количество нестандартных ситуаций пока является конечным, т.к. является конечным количество языков на земле. Проблемы начнутся, когда windows начнёт поставляться в другие звёздные системы, но на данном этапе пока это никого не колышет
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
04.05.2013, 11:29
Помогаю со студенческими работами здесь

Char, TCHAR, wchar_t
Как правильно записать эти 2 участка кода . Ошибки - 1>d:\c++\lab1\lab1\main.cpp(54): error C2664: strcpy: невозможно преобразовать...

Преобразование wchar_t в char
Преобразуйте пожалуйста wchar_t из данного кода, в обычный char. Пытался через MultiByteToWideChar. wchar_t h2; h2 =...

Преобразование wchar_t в char
Как преобразовать wchar_t в char ? Получаю wszName через MIB_IFTABLE.

Типы char and wchar_t
Добрый день ! Хочу уточнить по поводу wchar_t известно что размер строки char всегда больше на 1 символ char str =...

wanted 'char *', got 'wchar_t *
Перешол на XE2 открыл старый проэкт а тут куча ошибок Помогите пожалуйста...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
Первый деплой
lagorue 16.01.2026
Не спеша развернул своё 1ое приложение в kubernetes. А дальше мне интересно создать 1фронтэнд приложения и 2 бэкэнд приложения развернуть 2 деплоя в кубере получится 2 сервиса и что-бы они. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит токи на L и напряжения на C в установ. режимах до и. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru