4

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

谁能提供一些关于如何转换它的见解?

4

4 回答 4

11

根据您的编译设置,TCHAR是 achar或 a WCHAR(或wchar_t)。

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

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

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

于 2010-01-26T19:08:30.520 回答
3

做布赖恩说的一切。在您需要的代码页中获得它后,您可以执行以下操作:

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

或者

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

把它变成一个字符串。

于 2010-01-26T19:14:35.647 回答
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++ 项目。

于 2010-01-26T19:18:27.687 回答
1

这取决于。如果您尚未定义_UNICODE,或者UNICODE您可以创建一个包含如下字符的字符串:

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

如果您正在使用_UNICODEUNICODE那么这种方法可能仍然有效,但该字符可能无法转换为char. 在这种情况下,您需要将字符转换为字符串。通常,您需要使用类似wcstombsor的调用,WideCharToMultiByte它可以让您更全面地控制编码。

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

于 2010-01-26T19:13:07.973 回答