我有一个类,它返回一个指向“const TCHAR”的类型指针。我需要将它转换为std :: string,但我还没有找到实现这一目标的方法。
任何人都可以提供一些有关如何转换它的见解吗?
答案 0 :(得分:10)
根据您的编译设置,TCHAR
可以是char
或WCHAR
(或wchar_t
)。
如果使用多字节字符串设置,则TCHAR
与char相同。因此,您只需将字符串设置为返回的TCHAR*
即可。
如果您使用的是unicode字符串设置,那么TCHAR
是一个宽字符,需要使用WideCharToMultiByte进行转换。
如果您使用的是我认为的Visual Studio,则可以在“字符集”下的项目属性中更改此设置。
答案 1 :(得分:3)
Brian说的一切。一旦你在你需要的代码页中得到它,你就可以做到:
std::string s(myTchar, myTchar+length);
或
std::wstring s(myTchar, myTchar+length);
将其变成字符串。
答案 2 :(得分:3)
您也可以使用方便的ATL文本转换宏,例如:
std::wstring str = CT2W(_T("A TCHAR string"));
CT2W = Const Text To Wide。
您还可以指定转换的代码页,例如
std::wstring str = CT2W(_T("A TCHAR string"), CP_SOMECODEPAGE);
自VS2005以来,这些宏(以其当前形式)可供Visual Studio C ++项目使用。
答案 3 :(得分:1)
这取决于。如果您尚未定义_UNICODE
或UNICODE
,那么您可以创建一个包含如下字符的字符串:
const TCHAR example = _T('Q');
std::string mystring(1, example);
如果您使用的是_UNICODE
和UNICODE
,则此方法可能仍然有效,但该字符可能无法转换为char
。在这种情况下,您需要将字符转换为字符串。通常,您需要使用wcstombs
或WideCharToMultiByte
这样的调用,以便更全面地控制编码。
无论哪种方式,您都需要为结果分配缓冲区并从此缓冲区构造std::string
,记住在完成后释放缓冲区(或使用vector<char>
之类的内容,以便这样做自动发生。)