如何从std :: wstring _TCHAR []转换?

时间:2010-12-07 00:09:09

标签: c++ windows visual-c++ tchar

我正在使用一个库,并从其中一个函数向我发送std::wstring,另一个库需要_TCHAR []发送给它。我该如何转换它?

3 个答案:

答案 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

幸运的是,这项工作已经完成;请参阅herehere


  1. 实际上没有编译库函数可以真正期望tstring,因为TCHAR *在编译时被解析为TCHARchar 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;
}