69 votes

Je veux convertir std :: string en un const wchar_t *

Y a-t-il une méthode? Mon ordinateur est AMD64,

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

quand j'ai utilisé:

 loadU(&str);
 

le compilateur VS2005 dit: Erreur 7 erreur C2664 :: ne peut pas convertir le paramètre 1 de 'std :: string * __ w64' en 'const wchar_t *'

Comment puis-je le faire ?

112voto

marijne Points 1398

Commencez par le convertir en std :: wstring:

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

Ensuite, obtenez la chaîne C:

 wchar_t* widecstr = widestr.c_str();
 

48voto

Matt Dillard Points 9040

Si vous avez un std::wstring objet, vous pouvez appeler c_str() sur elle pour obtenir un wchar_t*:

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

Puisque vous êtes d'exploitation sur une étroite chaîne, cependant, vous avez d'abord besoin de l'élargir. Plusieurs options sont disponibles ici; l'un est d'utiliser Windows en MultiByteToWideChar de la routine. Qui vous donnera une LPWSTR, ce qui est équivalent à wchar_t*.

10voto

Rob Points 22239

Vous pouvez utiliser les macros de conversion de texte ATL pour convertir une chaîne étroite (char) en chaîne large (wchar_t). Par exemple, pour convertir un std :: string:

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

Vous pouvez également spécifier une page de code. Ainsi, si votre std :: string contient des caractères UTF-8, vous pouvez utiliser:

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

Très utile mais sous Windows uniquement.

5voto

kriss Points 10450

Si vous êtes sur Linux / Unix, jetez un coup d'œil à mbstowcs () et à wcstombs () définis dans GNU C (à partir d'ISO C 90).

  • mbs signifie "Multi Bytes String" et est en gros la chaîne C terminée par zéro.

  • wcs signifie Wide Char String et est un tableau de wchar_t.

Pour plus de détails sur les caractères larges, jetez un œil à la documentation de glibc ici .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X