Как мне преобразовать “указатель на const TCHAR” в “std::string”?
Вопрос
У меня есть класс, который возвращает типизированный указатель на "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>
так что это происходит автоматически).