Solución:
Puede convertir un std::wstring
a un const wchar_t *
utilizando el c_str
función miembro:
std::wstring wStr;
const wchar_t *str = wStr.c_str();
Sin embargo, una conversión a un const char *
no es natural: requiere una llamada adicional para std::wcstombs
, como por ejemplo:
#include <cstdlib>
// ...
std::wstring wStr;
const wchar_t *input = wStr.c_str();
// Count required buffer size (plus one for null-terminator).
size_t size = (wcslen(input) + 1) * sizeof(wchar_t);
char *buffer = new char[size];
#ifdef __STDC_LIB_EXT1__
// wcstombs_s is only guaranteed to be available if __STDC_LIB_EXT1__ is defined
size_t convertedSize;
std::wcstombs_s(&convertedSize, buffer, size, input, size);
#else
std::wcstombs(buffer, input, size);
#endif
/* Use the string stored in "buffer" variable */
// Free allocated memory:
delete buffer;
No puedes hacer esto así. std::wstring
representa una cadena de caracteres anchos (Unicode), mientras que char*
en este caso es una cadena de caracteres ASCII. Tiene que haber una conversión de página de códigos de Unicode a ASCII.
Para realizar la conversión, puede utilizar funciones de biblioteca estándar como wcstombs
, o Windows ‘ WideCharToMultiByte
función.
Actualizado para incorporar información de comentarios, gracias por señalarlo.
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)