¿Cómo convierto de CString
a const char*
en mi aplicación Unicode MFC?Convertir CString en const char *
Respuesta
Para convertir un CString TCHAR
a ASCII, utilice el CT2A
macro - esto también le permitirá convertir la cadena en UTF-8 (o cualquier otra página de códigos de Windows):
// Convert using the local code page
CString str(_T("Hello, world!"));
CT2A ascii(str);
TRACE(_T("ASCII: %S\n"), ascii.m_psz);
// Convert to UTF8
CString str(_T("Some Unicode goodness"));
CT2A ascii(str, CP_UTF8);
TRACE(_T("UTF8: %S\n"), ascii.m_psz);
// Convert to Thai code page
CString str(_T("Some Thai text"));
CT2A ascii(str, 874);
TRACE(_T("Thai: %S\n"), ascii.m_psz);
También hay una macro para convertir de ASCII -> Unicode (CA2T
) y puede utilizarlos en aplicaciones ATL/WTL siempre que tenga VS2003 o superior.
Consulte MSDN para obtener más información.
ya recibí la respuesta un poco antes y tienes razón, utilicé la macro CT2A. Gracias. – Attilah
También podrías hacer TRACE (_T (" ASCII:% S \ n "), CT2A (str) .m_psz); – ajs410
' CA2T' no ** convierte ** a Unicode. Se convierte en un 'TCHAR' que puede o no representar caracteres Unicode.' CA2 [ C] W' es la macro que se convierte en Unicode. – IInspectable
Nota: Esta respuesta es anterior al requisito de Unicode; ver los comentarios
Justo lo echarás:
CString s;
const TCHAR* x = (LPCTSTR) s;
Funciona porque CString tiene un operador de conversión para hacer exactamente esto.
El uso de TCHAR hace que su código sea independiente de Unicode; Si no está preocupado por Unicode, simplemente puede usar char
en lugar de TCHAR
.
cuando pruebo su método, me sale este error: "Error error C2664: 'CppSQLite3DB :: execDML': no se puede convertir el parámetro 1 de 'const TCHAR *' a 'const char * '". mi configuración de proyecto usa Unicode pero la función CppSQLite3DB :: execDML requiere un parámetro const char *. – Attilah
Como dice Mark, debe convertir de un CSC de Unicode a un ANSI CStringA: CStringA charstr (unicodestr); A continuación, puede convertir el CStringA en un const char * – RichieHindle
Hay una conversión explícita de CString a LPCTSTR, por lo que puede hacer (siempre Unicode no se especifica):
CString str;
// ....
const char* cstr = (LPCTSTR)str;
Recibí este mensaje de error: error C2440: 'tipo de conversión': no se puede convertir de 'CString' a 'LPCSTR' –
Esta respuesta es correcta para ANSI CString. En el caso de Unicode CString, vea la respuesta aceptada. – amolbk
Si su CString es Unicode, tendrá que hacer una conversión a multi- caracteres byte. Afortunadamente hay una versión de CString que hará esto automáticamente.
CString unicodestr = _T("Testing");
CStringA charstr(unicodestr);
DoMyStuff((const char *) charstr);
cuando uso esto, me sale este error: "Error error C2440: 'inicializando': no se puede convertir de 'CString' a 'ATL :: CStringT
@Attilah: Gracias por atrapando eso, tuve la sintaxis incorrecta. Reparado –
Tuve un problema similar. Tenía un buffer char*
con el nombre .so en él.
No pude convertir la variable char*
en LPCTSTR
. Así es como llegué a su alrededor ...
char *fNam;
...
LPCSTR nam = fNam;
dll = LoadLibraryA(nam);
I recommendo que utiliza ttoc de ConvUnicode.h
const CString word= "hello";
const char* myFile = TtoC(path.GetString());
Es una macro para hacer conversiones por Unicode
- 1. cómo convertir const WCHAR * a const char *
- 2. Cómo convertir wchar_t * a const char *
- 3. C++ convertir char a const char *
- 4. CString a char *
- 5. Cómo convertir 'const boost :: filesystem2 :: path' en 'const char *'?
- 6. Cómo convertir std :: string a const char *?
- 7. nsstring y const char * conversión
- 8. ¿Por qué no puedo convertir 'char **' a 'const char * const *' en C?
- 9. const char * miVar vs const char miVar []
- 10. Double to Const Char *
- 11. printf pregunta con una variable const char *
- 12. convertir const char * a NSString * y convertir de nuevo - _NSAutoreleaseNoPool()
- 13. Destructor en const char *
- 14. cómo convertir el valor de uint64_t en cadena const char?
- 15. convertir std :: wstring a const * char en C++
- 16. Corrección de const: const char const * const GetName const (// stuff);
- 17. convertido BSTR a const char *
- 18. Diferencia entre static const char * y const char *
- 19. Diferencia entre const char * p y const char * p
- 20. Convertir MFC CString a entero
- 21. Cómo convertir nsstring a cString?
- 22. inicialización const char *
- 23. const char * concatenación
- 24. Convertir CString a std :: wstring
- 25. C++: Significado de const char * const *
- 26. C Convertir char en char *
- 27. const char * a const std :: string &
- 28. C++ de unsigned char * a const char *
- 29. CString a conversión LPCTSTR
- 30. Conversión implícita de char ** a const char **
El hecho de que usted está construir un programa Unicode es CLAVE para este problema - POR FAVOR agregue esta información a la pregunta. (o alguien con rep hacerlo?) – Aardvark