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

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

有帮助吗?

解决方案

根据您的编译设置, TCHAR 是一个 char 或一个 WCHAR (或者 wchar_t).

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

如果您使用 unicode 字符串设置,那么您的 TCHAR 是一个宽字符,需要使用转换 宽字符到多字节.

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

其他提示

做的一切布赖恩说。一旦你在你需要的代码页得到它,那么你可以这样做:

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

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

得到它为一个字符串。

您还可以使用得心应手ATL文本转换宏为此,e.g:

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

CT2W =常数文本要宽。

您也可以指定一个代码页转换,e.g。

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

这些宏(在它们的当前形式)已自VS2005是可利用到Visual Studio C ++项目。

这取决于。如果尚未定义_UNICODEUNICODE然后可以使含有这样的字符的字符串:

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

如果你正在使用_UNICODEUNICODE那么这种方法可能仍然工作,但性格可能不是可转化为char。在这种情况下,你需要将文字转换为字符串。通常需要使用像wcstombsWideCharToMultiByte这可以提供对编码更全面控制的呼叫。

无论哪种方式,你将需要分配一个缓冲区的结果,从这个缓冲构造std::string,记住要解除分配缓冲区一旦你完成(或使用类似vector<char>使自动发生这种情况)。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top