![]() |
Преобразование типов С\С++
Пагни, у меня вопрос. Как можно грамотно преобразовать size_t в TCHAR.
Насколько я понял size_t это алиас для unsigned int? |
эм.. TCHAR это в зависимости от настроек алиас на wchar_t (2 байта) или char (1 байт)
а size_t - unsigned int (4 байта) Так что преобразовать полностью не получится. Места не хватит. |
Я подразумеваю что у меня TCHAR'овая строка.
|
Ну тогда TCHAR* а не TCHAR
Тебе что именно нужно? перевести из числа в строку или просто засунуть в двоичном виде в буфер? Если просто засунуть в буфер, то TCHAR * buf; или TCHAR buf[хзхз]; int i; *(int*)buf = i; Если преобразовать в стркоу, то sprintf(buf, "%u", i); |
sprintf ругается
Код:
Error 1 error C2664: 'sprintf' : cannot convert parameter 1 from 'TCHAR *' to 'char *' |
Все, разобрался. С TCHAR * buf не работает, нужно размер указывать обязательно. Хуита
|
Snake Plissken мда... подобные ругательства лечатся явным определением типов...
char buf; sprintf((TCHAR *)buf,...,...); НО TCHAR это спецовый макрос (как уже сказал slesh), который в зависимости от настроек проекта ANSI или UNICODE создает определенные строки char или wchar_t поэтому или пиши все в UNICODE или поставь в настройках проекта ANSI. |
Цитата:
дело в том, что процессор работает с UNICODE, и если программа написана в с использованием ascii, будет затрачено дополнительное время на преобразование |
Цитата:
ps: последнее время столько лулзов даж баш не доставлял, сколько форум ачата. |
Цитата:
|
Цитата:
Цитата:
Цитата:
|
2 AlexTheC0d3r
бывают ситуации, когда ты используешь фрагмент чужого кода например для генерации md5 хешей, а код этот был написан на Си в стародавние времена под unix... Я практически не программировал под unix, но на своей памяти я не видел исходник си программы под unix c использованием unicode -> могу сделать вывод, что разрабатывая код под unicode ты лишаешься кроссплатформенности (ну это может я загнул) |
Цитата:
А про кроссплатформенность - так это вообще отдельная тема, давайте здесь не будем ее затрагивать. Слешу спасибо. А ололокающие товарищи идите на свой башорг а не срите в теме. |
Snake Plissken сначала попробуй понять, что я написал а патом обсирай.
В WinAPI встречается куча преобразований т.к. например HANDLE это тот же DWORD тот же unsigned long, но компилятор ругается на передаваемые параметры. Примеры из жизни HFONT font=(HFONT)GetStockObject( ANSI_VAR_FONT ); TCHAR buf[1024]; SendMessage(hwnd,WM_SETTEXT,NULL,(LPARAM)buf); ---- Если в твоем коде изначально используются куча переменных типа char и компилятор выдает кучу ошибок типа "cannot convert parameter from 'char *' to 'wchar_t *'" при компиляции поставь в настройках проекта - не использовать UNICODE кодировку. ---- TCHAR это макрос придуманный мелкософтом. что-то типа: #ifdef _UNICODE typedef wchar_t TCHAR; #else typedef char TCHAR; #endif - что означает что в зависимости от настроек проекта TCHAR будет или char или wchar_t другими словами или ANSI либо UNICODE теперь твоему мозгу это понятно? |
Цитата:
Все что ты описал ниже своего примера из жизни я знаю и тебя об этом не спрашивал. А вот тот кусок кода что ты мне с самого начала скинул, там где sprintf((TCHAR) buf ... ты сам для начала скомпилируй и запусти. И посмотри что тебе выдаст студийный дебаггер. Между прочим от чего все это? От неуважения к собеседнику. |
Цитата:
Чем гавенее задается вопрос - тем больше флейма. Самому не понятно? Видишь срач начинающийся - значит косяк с вопросом. Конкретизируй, что тебе требуется. |
Я четвертым постом ответил что уже разрешил вопрос, понимаешь?
|
Ответ найдей. Хватит флудить! Тему закрываю!
|
| Время: 14:00 |