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

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

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

Quand j’ai utilisé:

 loadU(&str); 

le compilateur VS2005 dit:

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

Comment puis-je le faire?

Si vous avez un object std :: wssortingng, vous pouvez appeler c_str() pour obtenir un wchar_t* :

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

Comme vous opérez sur une chaîne étroite, vous devez d’abord l’élargir. Il y a plusieurs options ici; l’une consiste à utiliser la routine MultiByteToWideChar à MultiByteToWideChar . Cela vous donnera un LPWSTR , qui équivaut à wchar_t* .

Convertissez-le d’abord en std :: wssortingng:

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

Ensuite, récupère la chaîne C:

 const wchar_t* widecstr = widestr.c_str(); 

Cela ne fonctionne que pour les chaînes ASCII, mais cela ne fonctionnera pas si la chaîne sous-jacente est codée en UTF-8. L’utilisation d’une routine de conversion telle que MultiByteToWideChar () garantit que ce scénario est géré correctement.

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

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

Vous pouvez également spécifier une page de code, donc si votre chaîne std :: contient des caractères UTF-8, vous pouvez utiliser:

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

Très utile mais Windows uniquement.

Si vous êtes sous Linux / Unix, consultez mbstowcs () et wcstombs () définis dans GNU C (à partir de ISO C 90).

  • mbs signifie “Multi Bytes Ssortingng” et est essentiellement la chaîne C habituelle terminée par zéro.

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

Pour plus de détails sur les caractères larges, consultez la documentation de glibc ici .