wchar_t example c++ stl wchar-t stdstring

example - string to int c++



Quiero convertir std:: string en un const wchar_t* (4)

Puede usar las macros de conversión de texto ATL para convertir una cadena estrecha (char) en una amplia (wchar_t). Por ejemplo, para convertir una std :: string:

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

También puede especificar una página de códigos, de modo que si std :: string contiene caracteres UTF-8, puede usar:

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

Muy útil pero solo para Windows.

¿Hay algún método? Mi computadora es AMD64.

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

Cuando utilicé:

loadU(&str);

el compilador VS2005 dice:

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

¿Cómo puedo hacerlo?


Si está en Linux / Unix eche un vistazo a mbstowcs () y wcstombs () definidos en GNU C (de ISO C 90).

  • mbs representan "Multi Bytes String" y es básicamente la cadena C normal terminada en cero.

  • wcs significa Wide Char String y es una matriz de wchar_t.

Para obtener más detalles acerca de los caracteres anchos, eche un vistazo a la documentación de glibc aquí .


Si tiene un objeto std :: wstring, puede llamar a c_str() para obtener un wchar_t* :

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

Sin embargo, dado que está operando con una cuerda estrecha, primero deberá ensancharla. Aquí hay varias opciones; uno es usar la rutina MultiByteToWideChar de MultiByteToWideChar . Eso le dará un LPWSTR , que es equivalente a wchar_t* .


Primero conviértalo en std :: wstring:

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

A continuación, obtenga la cadena C:

wchar_t* widecstr = widestr.c_str();

Esto solo funciona para cadenas ASCII, pero no funcionará si la cadena subyacente está codificada en UTF-8. El uso de una rutina de conversión como MultiByteToWideChar () garantiza que este escenario se maneje correctamente.