2010-01-26 127 views
4

我有一个类,它返回一个类型指针“const TCHAR”。我需要将它转换为std :: string,但我还没有找到一种方法来实现这一点。如何将“指向常量TCHAR的指针”转换为“std :: string”?

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

+0

用返回的TCHAR作为初始值创建一个新的std :: string:TCHAR xyz = fun();字符串转换形式(xyz); ? – Leonidas 2010-01-26 19:08:06

回答

10

根据您的编译设置,TCHAR可能是charWCHAR(或wchar_t)。

如果您使用的是多字节字符串设置,那么您的TCHAR与char相同。所以你可以将你的字符串设置为返回的TCHAR*

如果您使用的是Unicode字符串设置,那么您的TCHAR是一个宽字符,需要使用WideCharToMultiByte进行转换。

如果您使用Visual Studio,我假设您是您可以在字符集下的项目属性中更改此设置。

+0

这是我做的: #if!defined(UNICODE)|| !(_UNICODE) const std :: string k_Var(reinterpret_cast (Var2.ReturnsAConstTCHAR())); #endif – TERACytE 2010-01-26 22:19:31

+0

糟糕。这应该是“static_cast”而不是“reinterpret_cast”。 – TERACytE 2010-01-26 22:32:47

1

这取决于。如果你还没有定义_UNICODEUNICODE那么你可以让包含这样的字符的字符串:

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

如果您正在使用_UNICODEUNICODE那么这种方法可能仍然工作,但性格可能不是对可转换一个char。在这种情况下,您需要将字符转换为字符串。通常情况下,您需要使用像wcstombsWideCharToMultiByte这样的呼叫,这样可以更全面地控制编码。无论采用哪种方式,您都需要为结果分配一个缓冲区,并从此缓冲区构建std::string,记住一旦完成后释放缓冲区(或使用类似vector<char>这样会自动发生)。

3

一切都是Brian说的。一旦你在你需要的代码页得到它,那么你可以做:

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

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

得到它为一个字符串。

3

您也可以使用方便的ATL文本转换宏为此,例如:

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

CT2W =常数文本要宽。

您还可以为转换指定一个代码页,例如,

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

自VS2005以来,这些宏(以其当前形式)可用于Visual Studio C++项目。

相关问题