[英]How do I convert from std::wstring _TCHAR []?
我正在使用一个库,并从其中一个函数向我发送std::wstring
,另一个库需要发送_TCHAR []
。 我怎么转换它?
假设您正在使用Unicode构建,那么std :: wstring.c_str()就是您所需要的。 请注意,c_str()保证它返回的字符串以空值终止。
例如
void func(const wchar_t str[])
{
}
std::wstring src;
func(src.c_str());
如果您使用的是非Unicode构建,则需要通过WideCharToMultiByte将Unicode字符串转换为非Unicode字符串。
正如@Zach Saw所说,如果只为Unicode构建,你可以使用std::wstring.c_str()
,但是最好定义一个tstring
( std::basic_string<TCHAR>
的typedef
),所以你可以安全地使用这种字符串与所有期望TCHAR
1的Windows和库函数完美地使用。
为了获得更多乐趣,您还应该为TCHAR
定义所有其他与字符串相关的C ++工具,并创建转换函数std::string
/ std::wstring
<=> tstring
。
TCHAR *
,因为TCHAR
在编译时被解析为char
或wchar_t
,但是您明白了。 使用ATL和MFC字符串转换宏 。 无论您是在_UNICODE
还是ANSI模式下进行编译,这都有效。
即使您不使用MFC,也可以使用这些宏。 仅包括此示例中显示的两个ATL标头:
#include <string>
#include <Windows.h>
#include <AtlBase.h>
#include <AtlConv.h>
int main()
{
std::wstring myString = L"Hello, World!";
// Here is an ATL string conversion macro:
CW2T pszT(myString.c_str());
// pszT is now an object which can be used anywhere a `const TCHAR*`
// is required. For example:
::MessageBox(NULL, pszT, _T("Test MessageBox"), MB_OK);
return 0;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.