当前位置:  开发笔记 > 编程语言 > 正文

我想将std :: string转换为const wchar_t*

如何解决《我想将std::string转换为constwchar_t*》经验,为你挑选了3个好方法。

有什么方法吗?我的电脑是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 *'

我该怎么做?



1> marijne..:

首先将其转换为std :: wstring:

std::wstring widestr = std::wstring(str.begin(), str.end());

然后得到C字符串:

const wchar_t* widecstr = widestr.c_str();

这仅适用于ASCII字符串,但如果基础字符串是UTF-8编码则不起作用.使用MultiByteToWideChar()之类的转换例程可确保正确处理此方案.


这应该适用于ASCII字符串,但如果底层字符串是UTF-8编码则不起作用.使用MultiByteToWideChar()之类的转换例程可确保正确处理此方案.

2> Matt Dillard..:

如果你有一个std :: wstring对象,你可以调用c_str()它来得到一个wchar_t*:

std::wstring name( L"Steve Nash" );
const wchar_t* szName = name.c_str();

但是,由于您在窄字符串上操作,因此首先需要加宽它.这里有各种选择; 一种是使用Windows的内置MultiByteToWideChar例程.这会给你一个LPWSTR,相当于wchar_t*.


@ʎǝʞuoɯɹǝqʎɔ:你的意思是`wstring var = L"text";`

3> Rob..:

您可以使用ATL文本转换宏将narrow(char)字符串转换为wide(wchar_t)字符串.例如,要转换std :: string:

#include 
...
std::string str = "Hello, world!";
CA2W pszWide(str.c_str());
loadU(pszWide);

您还可以指定代码页,因此如果您的std :: string包含UTF-8字符,您可以使用:

CA2W pszWide(str.c_str(), CP_UTF8);

非常有用,但仅限Windows.

推荐阅读
跟我搞对象吧
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有