Saltar al contenido

Cómo convertir un TCHAR array a estándar::string?

Esta es la respuesta más exacta que te podemos brindar, pero primero estúdiala pausadamente y analiza si se puede adaptar a tu proyecto.

Solución:

TCHAR es solo una definición de tipo que, dependiendo de la configuración de compilación, tiene como valor predeterminado char o wchar_t.

La biblioteca de plantillas estándar es compatible con ASCII (con std::string) y juegos de caracteres amplios (con std::wstring). Todo lo que necesitas hacer es definición de tipo Cadena como std::string o std::wstring dependiendo de su configuración de compilación. Para mantener la flexibilidad, puede utilizar el siguiente código:

#ifndef UNICODE  
  typedef std::string String; 
#else
  typedef std::wstring String; 
#endif

Ahora puedes usar String en su código y deje que el compilador maneje las partes desagradables. String ahora tendrá constructores que le permitirán convertir TCHAR a std::string o std::wstring.

El tipo TCHAR es char o wchar_tdependiendo de la configuración de su proyecto.

 #ifdef UNICODE
     // TCHAR type is wchar_t
 #else
     // TCHAR type is char
 #endif

Así que si debes usar std::string en vez de std::wstring, debe utilizar una función de conversión. puedo usar wcstombs o WideCharToMultiByte.

TCHAR * text;

#ifdef UNICODE
    /*/
    // Simple C
    const size_t size = ( wcslen(text) + 1 ) * sizeof(wchar_t);
    wcstombs(&buffer[0], text, size);
    std::vector buffer(size);
    /*/
    // Windows API (I would use this)
    std::vector buffer;
    int size = WideCharToMultiByte(CP_UTF8, 0, text, -1, NULL, 0, NULL, NULL);
    if (size > 0) 
        buffer.resize(size);
        WideCharToMultiByte(CP_UTF8, 0, text, -1, static_cast(&buffer[0]), buffer.size(), NULL, NULL);
    
    else 
        // Error handling
    
    //*/
    std::string string(&buffer[0]);
#else
    std::string string(text);
#endif

TCHAR es char o wchar_t, por lo que un

typedef basic_string   tstring;

es una forma de hacerlo.

La otra es saltar char en total y solo usar std::wstring.

valoraciones y comentarios

Si te sientes motivado, tienes la opción de dejar un escrito acerca de qué le añadirías a este ensayo.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *