Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> WCHAR 
:(
    Опции темы
En_t_end
Дата 7.7.2005, 13:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2074
Регистрация: 4.12.2004

Репутация: 1
Всего: 20



Очень удивило smile
Смотрим...
WIN32_FIND_DATA::CFileName - имеет тип WCHAR. Этот же тип "родом" от WORD. Который в свою очередь является потомком от ещё одного typedef unsigned short WORD;
Интересно как это по сути строка может храниться в переменной такого типа ? Нет... нет это понятно что char - это по сути тот же int, только в границах символов. Но как строка может храниться не в массиве int или скажем short ? Почему CFileName именно WCHAR, a не допустим указатель на массив WCHAR ?

И самое странное, что допустим cout спокойно воспринимает его, а вот lstrcat или strcat не хотят даже при явном преобразовании типов.

PS в голову приходят самые разные мысли... может этот член хранит номер файла в Файловой Системе ? Хм... но тогда откуда cout научился использовать это... ведь iostream никакого отношения к обращению с ФС не имеет.
PM MAIL ICQ Skype GTalk Jabber   Вверх
En_t_end
Дата 7.7.2005, 14:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2074
Регистрация: 4.12.2004

Репутация: 1
Всего: 20



MSDN:
16-bit Unicode character.
Но все же...
PM MAIL ICQ Skype GTalk Jabber   Вверх
Adil'
Дата 7.7.2005, 14:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 311
Регистрация: 26.8.2004
Где: Питер

Репутация: 6
Всего: 15



Ну, вообще-то, WIN32_FIND_DATA::cFileName определен как TCHAR[MAX_PATH] - т.е. массив, а вот TCHAR - определяется как WCHAR, если "UNICODE defined" - т.е. объектник собирается c поддержкой unicode, иначе TCHAR - это обычный CHAR.


--------------------
Удачи
PM MAIL WWW   Вверх
_hunter
Дата 7.7.2005, 14:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 16
Всего: 98



может всетаки WCHAR*?



--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
En_t_end
Дата 7.7.2005, 14:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2074
Регистрация: 4.12.2004

Репутация: 1
Всего: 20



Тогда как мне добавить данные в char[] из WIN32_FIND_DATA::CFileName путем приминения lstrcat ?
Добавлено @ 14:42
Примного извиняюсь. Ошибка была не в этом. А в строчке кода выше lstrcat. Думаю дальше обсуждать не нужно.
PM MAIL ICQ Skype GTalk Jabber   Вверх
не могу войти
  Дата 14.8.2005, 00:31 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











А как переменую типа WCHAR привести к типу CHAR? Т.е. переменной CHAR присвоить значение переменой WCHAR?
  Вверх
Adil'
Дата 14.8.2005, 09:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 311
Регистрация: 26.8.2004
Где: Питер

Репутация: 6
Всего: 15



Ну, вообще-то это не так просто. Смотри ф-цию WinAPI WideCharToMultiByte - если у тебя винды. Первый параметр флаг зависит от кодировки WCHAR, а в качестве строк можно передать адреса WCHAR и CHAR, указав длины как 1.


--------------------
Удачи
PM MAIL WWW   Вверх
Leksey
Дата 14.8.2005, 10:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 332
Регистрация: 12.12.2004

Репутация: нет
Всего: 1



А чтобы попроще есть С функция wctomb у нее параметров раза в два меньше.
PM MAIL   Вверх
JoyEx
Дата 14.8.2005, 10:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Дядя
**


Профиль
Группа: Участник
Сообщений: 323
Регистрация: 21.6.2005
Где: Москва, РФ

Репутация: нет
Всего: 12



Цитата(En_t_end @ 7.7.2005, 13:56)
Интересно как это по сути строка может храниться в переменной такого типа ? Нет... нет это понятно что char - это по сути тот же int, только в границах символов. Но как строка может храниться не в массиве int или скажем short ? Почему CFileName именно WCHAR, a не допустим указатель на массив WCHAR ?


En_t_end
В массиве, WCHAR определяет тип эл-тов массива, а имя массива - это указатель на первый эл-т. WCHAR = WORD = возведи 2 в степень 16 (слово = 2 байта = 16 бит) и увидишь, что хватит на все символы всех языков мира.

Цитата

typedef struct _WIN32_FIND_DATA {
...
...
TCHAR cFileName[MAX_PATH];
} WIN32_FIND_DATA, *PWIN32_FIND_DATA;


cFileName - это же массив!!!



--------------------
Если ты уже никого не боишься, значит ты самый страшный 
PM IM ICQ AOL YIM MSN   Вверх
avek
Дата 15.8.2005, 18:50 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Вообще-то в Unicode последних версий линейки 3.x определено порядка 150_000 символов... Так что 2 в степени 16 там не хватит smile
  Вверх
Adil'
Дата 16.8.2005, 08:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 311
Регистрация: 26.8.2004
Где: Питер

Репутация: 6
Всего: 15



Цитата(avek @ 15.8.2005, 18:50)
Вообще-то в Unicode последних версий линейки 3.x определено порядка 150_000 символов...
Ссылочку бы...

P.S. Китайских иероглифов всего то ~40 тысяч.


--------------------
Удачи
PM MAIL WWW   Вверх
Mayk
Дата 16.8.2005, 09:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


^аВаТаР^ сообщение>>
****


Профиль
Группа: Участник
Сообщений: 2616
Регистрация: 22.5.2005
Где: за границей разум а

Репутация: 45
Всего: 134



Цитата(Adil @ 16.8.2005, 12:55)
Цитата(avek @ 15.8.2005, 18:50)
Вообще-то в Unicode последних версий линейки 3.x определено порядка 150_000 символов...
Ссылочку бы...

P.S. Китайских иероглифов всего то ~40 тысяч.

Ээээ. unicode.org - не залазя в гугл угадал с первого раза. Да и UTF-32 не так уж неизвестен. Но подробнее смотрим
http://www.unicode.org/versions/bookmarks.html - параграф 2.5. Вот там про 32 битное представление написано.



--------------------
 Здесь был кролик. Но его убили.
Человеки < кроликов, йа считаю.
PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1157 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.