我正在使用一个库,并从其中一个函数向我发送std::wstring
,另一个库需要_TCHAR []
发送给它。我该如何转换它?
答案 0 :(得分:2)
假设您正在使用Unicode构建,那么std :: wstring.c_str()就是您所需要的。请注意,c_str()保证它返回的字符串以空值终止。
e.g。
void func(const wchar_t str[])
{
}
std::wstring src;
func(src.c_str());
如果您使用的是非Unicode版本,则需要通过WideCharToMultiByte将Unicode字符串转换为非Unicode字符串。
答案 1 :(得分:0)
正如 @Zach Saw 所说,如果你只为Unicode构建,你就可以使用std::wstring.c_str()
,但是最好定义一个tstring
(a {对于typedef
来说{1}},所以你可以安全地使用这种字符串与所有期望std::basic_string<TCHAR>
s 1 的Windows和库函数。
为了获得额外的乐趣,您还应该为TCHAR
定义所有其他与字符串相关的C ++工具,并创建转换函数TCHAR
/ std::string
&lt; =&gt; std::wstring
。
tstring
,因为TCHAR *
在编译时被解析为TCHAR
或char
s,但是你有了这个想法答案 2 :(得分:0)
使用ATL and MFC String Conversion Macros。无论您是在_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;
}