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

但是,由于您使用的是窄字符串,因此首先需要加宽它。这里有各种选择;一种是使用Windows内置的 MultiByteToWideChar 例程。这将为您提供 LPWSTR ,它等同于 wchar_t *

其他提示

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

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

然后获取C字符串:

const wchar_t* widecstr = widestr.c_str();

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

您可以使用ATL文本转换宏将narrow(char)字符串转换为wide(wchar_t)字符串。例如,要转换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 代表“多字节字符串”,基本上是常见的以零结尾的 C 字符串。

  • wcs 代表 Wide Char String,是一个 wchar_t 数组。

有关宽字符的更多背景详细信息,请参阅 glibc 文档 这里.

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top