Как мне преобразовать "указатель на const TCHAR" в "std :: string"? - PullRequest
4 голосов
/ 26 января 2010

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

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

Ответы [ 4 ]

10 голосов
/ 26 января 2010

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

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

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

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

3 голосов
/ 26 января 2010

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

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.

3 голосов
/ 26 января 2010

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

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

или

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

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

1 голос
/ 26 января 2010

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

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

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

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

...