我想把std :: string转换成一个const wchar_t *
有什么方法吗? 我的电脑是AMD64。
::std::string str; BOOL loadU(const wchar_t* lpszPathName, int flag = 0); 当我使用:
 loadU(&str); 
VS2005编译器说:
 Error 7 error C2664:: cannot convert parameter 1 from 'std::string *__w64 ' to 'const wchar_t *' 
我该怎么做?
 如果你有一个std :: wstring对象,你可以调用c_str()来得到一个wchar_t* : 
 std::wstring name( L"Steve Nash" ); const wchar_t* szName = name.c_str(); 
 既然你是在一个狭窄的string上操作,然而,你首先需要扩大它。 这里有各种select。 一个是使用Windows内置的MultiByteToWideChar例程。 这将给你一个LPWSTR ,这相当于wchar_t* 。 
首先将其转换为std :: wstring:
 std::wstring widestr = std::wstring(str.begin(), str.end()); 
然后得到Cstring:
 wchar_t* widecstr = widestr.c_str(); 
这仅适用于ASCIIstring,但如果底层string是UTF-8编码,则不起作用。 使用像MultiByteToWideChar()这样的转换例程可确保正确处理此场景。
您可以使用ATL文本转换macros来将窄(char)string转换为宽(wchar_t)string。 例如,要转换一个std :: string:
 #include <atlconv.h> ... std::string str = "Hello, world!"; CA2W pszWide(str.c_str()); loadU(pszWide); 
你也可以指定一个代码页,所以如果你的std :: string包含UTF-8字符,你可以使用:
 CA2W pszWide(str.c_str(), CP_UTF8); 
非常有用,但只有Windows。
如果你在Linux / Unix上看看在GNU C(从ISO C 90)中定义的mbstowcs()和wcstombs()。
- 
mbs代表“多字节string”,基本上是通常的零终止的Cstring。 
- 
wcs代表宽string,是一个wchar_t数组。 
有关宽字符的更多背景细节,请参阅glibc文档。