¿Cómo puedo convertir std :: wstring en const * char en C++?convertir std :: wstring a const * char en C++
Respuesta
Puede convertir un std::wstring
a un const wchar_t *
utilizando la función de miembro de c_str
:
std::wstring s;
const wchar_t *str = s.c_str();
Sin embargo, una conversión a una const char *
no es natural, sino que exige una llamada adicional a std::wcstombs
.
¿Puedes dar un ejemplo completo que incluya wcstombs? Estoy tratando de resolver esto de la manera que sugieres. –
cuando el wstring es wStr: 'const wchar_t * str = wStr.c_str(); size_t size = wcslen (str) * 2 + 2; char * StartPoint = new char [size]; size_t c_size; wcstombs_s (& c_size, StartPoint, tamaño, str, tamaño); ' – arielhad
@arielhad ¿Por qué +2 al final de la definición de tamaño? Además, esta 'fórmula' para el tamaño asume que char es de 8 bits, y wchar_t es de 16 bits, ¿no es así? Creo que sería mejor escribirlo llamando a sizeof() ya que no es necesariamente cierto para todas las plataformas. – KjMag
No puede hacer esto simplemente 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 usar las funciones de biblioteca estándar, como wcstombs
, o la función de Windows 'WideCharToMultiByte
.
Actualizado para incorporar información de los comentarios, gracias por señalarlo.
biblioteca estándar maneja esto. Ver 'wcrtomb',' wcsrtombs', por ejemplo. – nothrow
@Yossarian: El problema con las funciones de la biblioteca estándar es que el estándar no define qué conjunto de caracteres anchos, ni define qué juego de caracteres de varios bytes se usa en 'wcstombs'. Si necesita obtener la cadena en una codificación específica (como UTF-8), debe escribir la conversión usted mismo o usar una extensión específica de la plataforma (como WideCharToMultiByte) –
std :: string puede contener unicode a través de UTF- 8 y std :: wstring no está casado con UTF-16/UTF-32. Entonces esta es una respuesta muy engañosa. – anno
- 1. Cómo convertir std :: string a const char *?
- 2. C++ convertir char a const char *
- 3. Convertir CString a std :: wstring
- 4. const char * a const std :: string &
- 5. cómo convertir const WCHAR * a const char *
- 6. C++ std :: string y NULL const char *
- 7. C++ de unsigned char * a const char *
- 8. Cómo convertir wchar_t * a const char *
- 9. ¿Por qué no puedo convertir 'char **' a 'const char * const *' en C?
- 10. Convertir CString en const char *
- 11. Cómo convertir CString y :: std :: string :: std :: wstring entre sí?
- 12. Python a C/C++ const char pregunta
- 13. Cómo convertir std :: wstring a tipo numérico (int, long, float)?
- 14. convertido BSTR a const char *
- 15. Conversión implícita de char ** a const char **
- 16. Cómo convertir char * a std :: vector?
- 17. const unsigned char * to std :: string
- 18. convertir const char * a NSString * y convertir de nuevo - _NSAutoreleaseNoPool()
- 19. ¿Cuál usar const char [] o const std :: string?
- 20. C Convertir char en char *
- 21. Cómo convertir 'const boost :: filesystem2 :: path' en 'const char *'?
- 22. convirtiendo una matriz de cadenas terminadas nulas const char * a std :: vector <std :: string>
- 23. Const const char * string a NSString con longitud Y codificación
- 24. std :: wstring length
- 25. ¿Cómo inicializar e imprimir una std :: wstring?
- 26. Delphi PChar a C++ const char *
- 27. C++: Significado de const char * const *
- 28. Double to Const Char *
- 29. Conversión de std :: wstring a QString lanza error de vinculador
- 30. Cómo convertir UTF-8 std :: string a UTF-16 std :: wstring?
Hay muchas maneras. Cuál es el adecuado para usted depende de una gran cantidad de hechos que no ha proporcionado. ¿Qué codificación quieres que tenga el resultado? ¿Qué plataforma/codificación de conversión lib estás utilizando? – sbi
¿Qué sistema operativo? Al menos en Windows debes hacer esto raramente, p. si quieres escribir una cadena UTF-8 en un archivo. – Philipp
Existe este "[Absoluto mínimo que todo desarrollador de software debe saber absolutamente absoluto sobre Unicode y conjuntos de caracteres (¡Sin excusas!)] (Http://www.joelonsoftware.com/articles/Unicode.html)", que debe leerse ! – Jaywalker