如何从std :: wstring _tchar []转换?
-
09-10-2019 - |
题
我正在使用图书馆,并寄给我 std::wstring
从其功能之一,另一个需要的库 _TCHAR []
被发送到它。我该如何转换?
解决方案
假设您使用的是Unicode build,则您需要的是std :: wstring.c_str()。请注意,C_STR()保证其返回的字符串为null终止。
例如
void func(const wchar_t str[])
{
}
std::wstring src;
func(src.c_str());
如果您使用的是非unicode构建,则需要通过 Widechartomultibyte.
其他提示
作为 @zach看到 说,如果您只为Unicode构建,您可以摆脱 std::wstring.c_str()
, ,但易于定义一个 tstring
(一个 typedef
为了 std::basic_string<TCHAR>
)因此,您可以在所有期望的所有窗口和库功能中安全地使用此类字符串 TCHAR
s1.
为了获得其他乐趣,您还应定义所有其他与字符串相关的C ++设施 TCHAR
S,并创建转换功能 std::string
/std::wstring
<=> tstring
.
- 实际上,没有编译的库功能真的可以期待
TCHAR *
, , 自从TCHAR
s被解析为char
S或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;
}
不隶属于 StackOverflow