Question

I have a class which returns a typed pointer to a "const TCHAR". I need to convert it to a std::string but I have not found a way to make this happen.

Can anyone provide some insight on how to convert it?

Was it helpful?

Solution

Depending on your compiling settings, TCHAR is either a char or a WCHAR (or wchar_t).

If you are using the multi byte character string setting, then your TCHAR is the same as a char. So you can just set your string to the TCHAR* returned.

If you are using the unicode character string setting, then your TCHAR is a wide char and needs to be converted using WideCharToMultiByte.

If you are using Visual Studio, which I assume you are, you can change this setting in the project properties under Character Set.

OTHER TIPS

Do everything Brian says. Once you get it in the codepage you need, then you can do:

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

or

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

to get it into a string.

You can also use the handy ATL text conversion macros for this, e.g.:

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

CT2W = Const Text To Wide.

You can also specify a code page for the conversion, e.g.

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

These macros (in their current form) have been available to Visual Studio C++ projects since VS2005.

It depends. If you haven't defined _UNICODE or UNICODE then you can make a string containing the character like this:

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

If you have are using _UNICODE and UNICODE then this approach may still work but the character may not be convertable to a char. In this case you will need to convert the character to a string. Typically you need to use a call like wcstombs or WideCharToMultiByte which gives you fuller control over the encoding.

Either way you will need to allocate a buffer for the result and construct the std::string from this buffer, remembering to deallocate the buffer once you're done (or use something like vector<char> so that this happens automatically).

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top