Pergunta

Existe algum método? Meu computador é AMD64.

::std::string str;
BOOL loadU(const wchar_t* lpszPathName, int flag = 0);

Quando eu usei:

loadU(&str);

o compilador VS2005 diz:

Error 7 error C2664:: cannot convert parameter 1 from 'std::string *__w64 ' to 'const wchar_t *'

Como posso fazê-lo?

Foi útil?

Solução

Se você tem um objeto std :: wstring, você pode chamar c_str() sobre ele para obter uma wchar_t*:

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

Uma vez que você estiver operando em uma corda estreita, no entanto, você primeiro precisa ampliá-lo. Existem várias opções aqui; uma é usar o Windows' built-in MultiByteToWideChar rotina. Isso lhe dará uma LPWSTR, o que equivale a wchar_t*.

Outras dicas

Primeiro convertê-lo para std :: wstring:

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

Em seguida, obter a seqüência C:

const wchar_t* widecstr = widestr.c_str();

Isso só funciona para strings ASCII, mas não vai funcionar se a cadeia subjacente é UTF-8 codificado. Usando uma rotina de conversão como MultiByteToWideChar () garante que este cenário é tratada adequadamente.

Você pode usar as macros de conversão de texto ATL para converter uma cadeia estreita (char) para uma ampla (wchar_t) um. Por exemplo, para converter um std :: string:

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

Você também pode especificar uma página de código, por isso, se o seu std :: string contém caracteres UTF-8 que você pode usar:

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

Muito útil, mas somente para Windows.

Se você estiver em Linux / Unix ter um olhar para mbstowcs () e wcstombs () definidos no GNU C (a partir de ISO C 90).

  • MBS estar para "Multi Bytes String" e é basicamente zero habitual string terminada C.

  • wcs representam Ampla Char Cordas e é uma matriz de wchar_t.

Para mais detalhes do fundo em caracteres largos ter um olhar para a documentação glibc aqui .

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top