2010-01-26 6 views
4

У меня есть класс, который возвращает типизированный указатель на «const TCHAR». Мне нужно преобразовать его в std :: string, но я не нашел способа сделать это.Как преобразовать «указатель в const TCHAR» в «std :: string»?

Может ли кто-нибудь дать представление о том, как его преобразовать?

+0

Создайте новую строку std :: с возвращенным TCHAR как начальное значение: TCHAR xyz = fun(); строка convertforme (xyz); ? – Leonidas

ответ

10

В зависимости от ваших настроек компиляции, TCHAR является либо char или WCHAR (или wchar_t).

Если вы используете настройку символьной строки с несколькими байтами, то ваш TCHAR будет таким же, как символ. Таким образом, вы можете просто установить строку в возвращаемом TCHAR*.

Если вы используете настройку символьной строки в Юникоде, то ваш TCHAR является широким символом и должен быть преобразован с использованием WideCharToMultiByte.

Если вы используете Visual Studio, я полагаю, вы можете изменить этот параметр в свойствах проекта в разделе Набор символов.

+0

Вот что я сделал: #if! Defined (UNICODE) || !(_UNICODE) const std :: string k_Var (reinterpret_cast (Var2.ReturnsAConstTCHAR())); #endif – TERACytE

+0

Упс. Это должно читать «static_cast», а не «reinterpret_cast». – TERACytE

1

Это зависит. Если вы не определили _UNICODE или UNICODE, то вы можете сделать строку, содержащий символ, как это:

const TCHAR example = _T('Q'); 
std::string mystring(1, example); 

Если вы используете _UNICODE и UNICODE, этот подход может еще работать, но персонаж не может быть конвертируемым в a char. В этом случае вам нужно будет преобразовать символ в строку. Обычно вам нужно использовать вызов, например wcstombs или WideCharToMultiByte, который дает вам более полный контроль над кодировкой.

В любом случае вам нужно будет выделить буфер для результата и построить в этом буфере std::string, не забывая освободить буфер после завершения (или использовать что-то вроде vector<char>, чтобы это произошло автоматически).

3

Сделайте все, что говорит Брайан. После того, как вы получите его в кодировке вам нужно, то вы можете сделать:

std::string s(myTchar, myTchar+length); 

или

std::wstring s(myTchar, myTchar+length); 

, чтобы получить его в строку.

3

Вы также можете использовать удобные макросы преобразования ATL текста для этого, например .:

std::wstring str = CT2W(_T("A TCHAR string")); 

CT2W = Const Text To Wide.

Вы также можете указать кодовую страницу для преобразования, например.

std::wstring str = CT2W(_T("A TCHAR string"), CP_SOMECODEPAGE); 

Эти макросы (в их текущей форме) были доступны для проектов Visual Studio C++ с VS2005.

 Смежные вопросы

  • Нет связанных вопросов^_^