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.