如何将“指向 const TCHAR 的指针”转换为“std::string”?
题
我有一个类返回一个指向“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 ++项目。
这取决于。如果尚未定义_UNICODE
或UNICODE
然后可以使含有这样的字符的字符串:
const TCHAR example = _T('Q');
std::string mystring(1, example);
如果你正在使用_UNICODE
和UNICODE
那么这种方法可能仍然工作,但性格可能不是可转化为char
。在这种情况下,你需要将文字转换为字符串。通常需要使用像wcstombs
或WideCharToMultiByte
这可以提供对编码更全面控制的呼叫。
无论哪种方式,你将需要分配一个缓冲区的结果,从这个缓冲构造std::string
,记住要解除分配缓冲区一旦你完成(或使用类似vector<char>
使自动发生这种情况)。
不隶属于 StackOverflow