我正在使用一个库,并std::wstring
从它的一个功能和另一个需要_TCHAR []
发送给它的库中发送给我。我怎样才能转换它?
问问题
2832 次
3 回答
2
假设您使用的是 Unicode 构建,std::wstring.c_str() 就是您所需要的。请注意,c_str() 保证它返回的字符串是以空值结尾的。
例如
void func(const wchar_t str[])
{
}
std::wstring src;
func(src.c_str());
如果您使用的是非 Unicode 构建,则需要通过WideCharToMultiByte将 Unicode 字符串转换为非 Unicode 字符串。
于 2010-12-07T00:47:27.757 回答
0
正如@Zach Saw所说,如果你只为 Unicode 构建,你可以侥幸逃脱std::wstring.c_str()
,但从概念上讲,最好定义一个tstring
(a typedef
for std::basic_string<TCHAR>
),这样你就可以安全地使用这种字符串完美地与所有期望的 Windows 和库函数一起使用1 . TCHAR
_
为了获得更多乐趣,您还应该为 s 定义所有其他与字符串相关的 C++ 工具TCHAR
,并创建转换函数std::string
/ std::wstring
<=> tstring
。
- 实际上没有编译的库函数可以真正期望 a
TCHAR *
,因为TCHAR
s 在编译时被解析为char
s 或wchar_t
s ,但你明白了。
于 2010-12-07T00:53:16.963 回答
0
使用ATL 和 MFC 字符串转换宏。无论您是在_UNICODE
ANSI 模式下还是在 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;
}
于 2010-12-07T01:17:01.137 回答