Как мне преобразовать “указатель на const TCHAR” в “std::string”?

StackOverflow https://stackoverflow.com/questions/2141848

  •  22-09-2019
  •  | 
  •  

Вопрос

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

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

Это было полезно?

Решение

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

Если вы используете настройку многобайтовой символьной строки, то ваш TCHAR это то же самое, что и символ char.Таким образом, вы можете просто установить свою строку на TCHAR* вернулся.

Если вы используете настройку символьной строки в юникоде, то ваш TCHAR является широким символом и должен быть преобразован с помощью Широкоформатный график.

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

Другие советы

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

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

или

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

чтобы превратить это в строку.

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

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

CT2W = Постоянный текст в Ширину.

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

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

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top