c++ string stdstring wchar-t

c++ - ¿Cómo convierto wchar_t*a std:: string?



stdstring wchar-t (5)

Cambié mi clase para usar std :: string (según la respuesta que obtuve here pero una función que devuelve wchar_t *. ¿Cómo la convierto en std :: string?

Intenté esto:

std::string test = args.OptionArg();

pero dice error C2440: ''inicializando'': no ​​se puede convertir de ''wchar_t *'' a ''std :: basic_string <_Elem, _Traits, _Ax>''


Esta es una pregunta antigua, pero si es el caso, en realidad no estás buscando conversiones sino que utilizas el material TCHAR de Mircosoft para poder construir tanto ASCII como Unicode, podrías recordar que std :: string es realmente

typedef std::basic_string<char> string

Así podríamos definir nuestro propio typedef, digamos

#include <string> namespace magic { typedef std::basic_string<TCHAR> string; }

Entonces podrías usar magic::string con TCHAR , LPCTSTR , etc.


Puede convertir una cadena ancha de caracteres en una cadena ASCII utilizando la siguiente función:

#include <locale> #include <sstream> #include <string> std::string ToNarrow( const wchar_t *s, char dfault = ''?'', const std::locale& loc = std::locale() ) { std::ostringstream stm; while( *s != L''/0'' ) { stm << std::use_facet< std::ctype<wchar_t> >( loc ).narrow( *s++, dfault ); } return stm.str(); }

Tenga en cuenta que esto solo reemplazará cualquier carácter ancho para el cual no exista un carácter ASCII equivalente con el parámetro dfault ; no convierte de UTF-16 a UTF-8. Si desea convertir a UTF-8, utilice una biblioteca como ICU .


Puedes usar wstring y mantener todo en Unicode.


solo por diversión :-):

const wchar_t* val = L"hello mfc"; std::string test((LPCTSTR)CString(val));


wstring ws( args.OptionArg() ); string test( ws.begin(), ws.end() );