перевести const TCHAR* в std::string

Автор Тема: перевести const TCHAR* в std::string  (Прочитано 7899 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн ЭдАвтор темы

  • ADN OPEN
  • **
  • Сообщений: 87
  • Карма: 0
перевести const TCHAR* в std::string
« : 08-10-2014, 22:13:21 »
Можно ли перевести перевести const TCHAR* в std::string в проекте ObjARX?

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: перевести const TCHAR* в std::string
« Ответ #1 : 09-10-2014, 00:23:23 »
Можно ли перевести перевести const TCHAR* в std::string в проекте ObjARX?
Можно. Но правильнее переводить в std::wstring, т.к. TCHAR (начиная с версии AutoCAD 2007) являются символами UNICODE (два байта на символ).
P.S.: Вопрос вообще-то на знание C++  и ObjectARX имеет очень косвенное отношение.
P.S.S.: Если тебе нужен ответ на вопрос, то не поленись сформулировать его максимально подробно. В частности, зачем тебе нужен std::string. А на вопрос "Можно ли...?" я ответил четко: "Можно!"
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: перевести const TCHAR* в std::string
« Ответ #2 : 09-10-2014, 02:25:45 »
Кстати элементарное "гугление" (например такое) приводит например к такому решению: http://vajris.wordpress.com/2012/10/15/conversion-tchar-wstring-string-string/
Впрочем что будет с русскими буквами при преобразовании std::wstring в std::string при помощи этого кода я не берусь предсказывать.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Николай Горлов

  • ADN
  • *
  • Сообщений: 238
  • Карма: 34
Re: перевести const TCHAR* в std::string
« Ответ #3 : 09-10-2014, 11:05:37 »
Цитировать
Но правильнее переводить в std::wstring
увы, Александр, иногда это просто не возможно. Из личного опыта могу сказать, что библиотека ibpp, которой мы раньше пользовались для связи с СУБД Firebird требовала того, чтоб строки были именно CHAR* а не WCHAR*, т.к. 64-битного firebird не существует и по сей день. так что, пока не перешли на ADO, приходилось подтанцовывать с бубном :):):)
в качестве примера могу предложить:
std::wstring wcurName = _T("Широкая строка");
std::string scurName = CW2A(wcurName.c_str());
// wcurName.c_str() -> это и есть const TCHAR*
по поводу русского текста всё работает и без лишних телодвижений, но если будут проблемы, то перед работой с текстом (в основном это связано с  чтением/записью текстовых файлов) пользуюсь вот этим
#include <fstream>
...
_tsetlocale(LC_ALL,_T("russian"));// <---- это вставить перед началом работы с русским текстом (желательно, т.к. если вставить тупо в начале функции, может и не сработать)
FILE * fcreate = _tfopen(createFile.GetString(),_T("w"));
_ftprintf(fcreate,createScript.GetString());
fclose(fcreate);

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: перевести const TCHAR* в std::string
« Ответ #4 : 09-10-2014, 11:37:08 »
СУБД Firebird требовала того, чтоб строки были именно CHAR* а не WCHAR*, т.к. 64-битного firebird не существует и по сей день.
Николай. Ты тут смешиваешь два совершенно независимых понятия. При чем здесь 64-битный и WCHAR * ???
В 2006-ом году я написал такую статью: http://www.private.peterlink.ru/poleshchuk/cad/2006/M2007-AcString.htm
Возможно она будет полезна Эд.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Николай Горлов

  • ADN
  • *
  • Сообщений: 238
  • Карма: 34
Re: перевести const TCHAR* в std::string
« Ответ #5 : 09-10-2014, 12:25:21 »
хм... перечитал свой ответ еще раз. вроде ничего не смешиваю :)
тема звучит как-то так: "перевести const TCHAR* в std::string"
ваш ответ был: "правильнее переводить в std::wstring"

вот я и описал случай когда НУЖНО переводить именно в string a не в wstring. firebird был взят просто для примера, т.к. он требует на вход всех своих функций именно char* а не wchar* (может если б появился 64-битный и логика была б у него другая (смысла развиватьт эту тему не вижу, т.к. от нас все-равно ничего не зависит), не знаю. живем сегодняшним днем).

PS: возможно я не прав, но с 2000-лохматого года TCHAR* у меня ассоциируется благодаря objectarx исключительно с широкой строкой :), ибо юникод на дворе :):):), следовательно, для себя тему я трактовал так: "перевести const WCHAR* в std::string", т.е широкую строку в обычную. ну и ответил кусочком кода  ::)

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: перевести const TCHAR* в std::string
« Ответ #6 : 09-10-2014, 12:38:39 »
хм... перечитал свой ответ еще раз. вроде ничего не смешиваю :)
Ты смешал 64-битность и Unicode (перечитай тот кусок твоего текста, который я цитировал). А это совершенно разные вещи. Привожу пример. AutoCAD 2007 был только 32-битный, но Unicode.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: перевести const TCHAR* в std::string
« Ответ #7 : 09-10-2014, 12:39:29 »
ну и ответил кусочком кода  ::)
Код то как раз правильный, но причем здесь 64-битность ???
« Последнее редактирование: 09-10-2014, 12:57:25 от Александр Ривилис »
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Николай Горлов

  • ADN
  • *
  • Сообщений: 238
  • Карма: 34
Re: перевести const TCHAR* в std::string
« Ответ #8 : 09-10-2014, 13:21:11 »
Цитировать
но причем здесь 64-битность
каюсь, блондинка я  ::). голова чуток другим забита.
просто для меня возможность использовать юникодовые строки тупо означает возможность написания 64-битного приложения (вариант использования широких строк для 32-битных китайцев как-то в голову не пришел сразу. а русский и английский смело вмещаются и в простую строку. как-то ж жили до 2007 акада). вот и ассоциация сразу в голову влезла, что юникод = 64-bit.
ps: только из отпуска, и еще никак не могу включиться в рабочий ритм  ;D
ps2: да и уже давненько я перелез на 64 бита, так что теперь изначально все под них идет, а уж потом на 32 иногда на другом компике проверяю результаты