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 开发者_如何学Cto convert it?
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.
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).
精彩评论