如何将“指向const TCHAR的指针”转换为“std :: string”?

时间:2010-01-26 19:02:56

标签: c++ stdstring tchar

我有一个类,它返回一个指向“const TCHAR”的类型指针。我需要将它转换为std :: string,但我还没有找到实现这一目标的方法。

任何人都可以提供一些有关如何转换它的见解吗?

4 个答案:

答案 0 :(得分:10)

根据您的编译设置,TCHAR可以是charWCHAR(或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)

这取决于。如果您尚未定义_UNICODEUNICODE,那么您可以创建一个包含如下字符的字符串:

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

如果您使用的是_UNICODEUNICODE,则此方法可能仍然有效,但该字符可能无法转换为char。在这种情况下,您需要将字符转换为字符串。通常,您需要使用wcstombsWideCharToMultiByte这样的调用,以便更全面地控制编码。

无论哪种方式,您都需要为结果分配缓冲区并从此缓冲区构造std::string,记住在完成后释放缓冲区(或使用vector<char>之类的内容,以便这样做自动发生。)