Tengo una cadena en formato char*
y me gustaría convertirla a wchar_t*
, para pasar a una función de Windows.¿Cómo convierto una cadena de caracteres en una cadena wchar_t?
Respuesta
¿Ayuda esta pequeña función?
#include <cstdlib>
int mbstowcs(wchar_t *out, const char *in, size_t size);
Véase también la C++ reference
Si no desea vincular con la biblioteca de tiempo de ejecución C, utilice la llamada a la API MultiByteToWideChar, por ejemplo:
const size_t WCHARBUF = 100;
const char s[] = "HELLO";
wchar_t wszDest[WCHARBUF];
MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED, szSource, -1, wszDest, WCHARBUF);
el SDK de Windows especifica 2 funciones en kernel32.lib para convertir cadenas desde y hacia un conjunto ancho de caracteres. esos son MultiByteToWideChar()
y WideCharToMultiByte()
.
tenga en cuenta que, a diferencia del nombre de la función, la cadena no necesariamente utiliza un juego de caracteres de varios bytes, sino que puede ser una cadena ANSI simple. También tenga en cuenta que esas funciones comprenden UTF-7 y UTF-8 como un conjunto de caracteres de múltiples bytes. el conjunto de caracteres de char ancho es siempre UTF-16. respuesta
de schnaader utilizar la conversión definida por la configuración regional C actual, éste utiliza la interfaz de configuración regional de C++ (que dijo que era fácil?)
std::wstring widen(std::string const& s, std::locale loc)
{
std::char_traits<wchar_t>::state_type state = { 0 };
typedef std::codecvt<wchar_t, char, std::char_traits<wchar_t>::state_type >
ConverterFacet;
ConverterFacet const& converter(std::use_facet<ConverterFacet>(loc));
char const* nextToRead = s.data();
wchar_t buffer[BUFSIZ];
wchar_t* nextToWrite;
std::codecvt_base::result result;
std::wstring wresult;
while ((result
= converter.in
(state,
nextToRead, s.data()+s.size(), nextToRead,
buffer, buffer+sizeof(buffer)/sizeof(*buffer), nextToWrite))
== std::codecvt_base::partial)
{
wresult.append(buffer, nextToWrite);
}
if (result == std::codecvt_base::error) {
throw std::runtime_error("Encoding error");
}
wresult.append(buffer, nextToWrite);
return wresult;
}
- 1. ¿Cómo convierto caracteres de cadena en una lista?
- 2. Cómo convierto jstring a wchar_t *
- 3. OCaml - ¿Cómo convierto int en una cadena?
- 4. ¿Cómo convierto StreamReader a una cadena?
- 5. ¿Cómo convierto una matriz de bytes en una cadena?
- 6. ¿Cómo convierto una cadena en una lista en Io?
- 7. ¿Cómo convierto una cadena en una representación en minúsculas?
- 8. convertir una cadena en una matriz de caracteres
- 9. ¿Cómo convierto una cadena como "Rojo" en una System.Windows.Media.Color?
- 10. ¿Cómo convierto una cadena JSON a una función en javascript?
- 11. ¿Cómo convierto una cadena separada por comas en una matriz?
- 12. ¿Cómo convierto una cadena ISO 8601 en una Delphi TDate?
- 13. ¿Cómo convierto un UIColor en una cadena hexadecimal?
- 14. ¿Cómo convierto una cadena a UTF-8 en Android?
- 15. ¿Cómo convierto una cadena en caso de título en android?
- 16. cómo quitar los caracteres en una cadena?
- 17. Cómo eliminar caracteres repetidos en una cadena
- 18. Cómo reemplazar caracteres en una cadena java?
- 19. Cómo reemplazar caracteres especiales en una cadena?
- 20. Cómo mezclar caracteres en una cadena
- 21. Eliminar caracteres de una cadena
- 22. Recortar caracteres de una cadena
- 23. Cómo convierto un nombre de función en una cadena
- 24. ¿Cómo convierto una cadena en un método de clase?
- 25. ¿Cómo convierto una cadena en byte en C#?
- 26. ¿Cómo convierto una cadena en un char * en C++?
- 27. ¿Cómo convierto un doble en una cadena en C++?
- 28. ¿Cómo convierto un campo XML con más de 8000 caracteres en una cadena?
- 29. ¿Cómo convierto las secuencias de escape Unicode a caracteres Unicode en una cadena .NET?
- 30. ¿Cómo convierto una cadena binaria en un número en Perl?
mayoría de las funciones de Windows en realidad son de dos tipos, una "A "y" W "versión. P.ej. MessageBoxA/MessageBoxW, con una macro "MessageBox" refiriéndose a uno de los dos. Pero si usa el nombre explícito 'MessageBoxA', puede pasar un' char * 'independientemente de la configuración del proyecto. – MSalters