Pregunta

Tengo una clase que devuelve un puntero mecanografiada a un "const TCHAR". Necesito convertir a un std :: string, pero no he encontrado una manera de hacer que esto suceda.

Puede cualquier persona proporcionar una idea sobre la forma de convertir?

¿Fue útil?

Solución

Según la configuración de la compilación, TCHAR es o bien un char o una WCHAR (o wchar_t).

Si está utilizando la configuración de la cadena de múltiples caracteres de doble byte, entonces su TCHAR es lo mismo que un char. Por lo que sólo puede configurar su cadena a la TCHAR* devuelto.

Si está utilizando la configuración de cadena de caracteres Unicode, entonces su TCHAR es una amplia carbón y necesita ser convertido usando WideCharToMultiByte .

Si está utilizando Visual Studio, que yo supongo que usted es, usted puede cambiar esta configuración en las propiedades del proyecto en virtud de juego de caracteres.

Otros consejos

dice hacer todo Brian. Una vez que lo consigue en la página de códigos que necesita, entonces usted puede hacer:

std::string s(myTchar, myTchar+length);

o

std::wstring s(myTchar, myTchar+length);

para ponerlo en una cadena.

También puede utilizar las macros de conversión de texto a mano ATL para esto, por ejemplo:.

std::wstring str = CT2W(_T("A TCHAR string"));

CT2W = Const texto Para ancha.

También puede especificar una página de códigos para la conversión, por ejemplo.

std::wstring str = CT2W(_T("A TCHAR string"), CP_SOMECODEPAGE);

Estas macros (en su forma actual) han estado disponibles para proyectos de Visual Studio C ++ desde VS2005.

Depende. Si no ha definido _UNICODE o UNICODE entonces puede presentar una cadena que contiene el carácter de esta manera:

const TCHAR example = _T('Q');
std::string mystring(1, example);

Si ha _UNICODE está utilizando y UNICODE entonces este enfoque todavía puede funcionar, pero el personaje no puede ser convertible a un char. En este caso, tendrá que convertir el carácter en una cadena. Por lo general es necesario utilizar una llamada como wcstombs o WideCharToMultiByte el cual le da un control más completo sobre la codificación.

De cualquier manera tendrá que asignar un búfer para el resultado y construir el std::string de este buffer, recordando a desasignar la memoria intermedia una vez que haya terminado (o algo así como el uso vector<char> para que esto suceda de forma automática).

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top