Wie konvertiere ich von CString
zu in meiner Unicode MFC-Anwendung?Convert CString zu const char *
Antwort
Um einen TCHAR
CString in ASCII zu konvertieren, verwenden Sie die CT2A
Makro - dies erlaubt es Ihnen auch um die Zeichenfolge zu UTF8 (oder jede andere Windows-Codepage) zu konvertieren:
// 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);
Es ist auch ein Makro zum Konvertieren von ASCII -> Unicode (CA2T
) und Sie können diese in ATL/WTL-Anwendungen verwenden, solange Sie VS2003 oder höher haben.
Weitere Informationen finden Sie unter MSDN.
Ich habe bereits die Antwort auf die Frage ein wenig früher und du hast recht, ich habe das CT2A Makro verwendet. Danke. – Attilah
Sie könnten auch TRACE (_T (" ASCII:% S \ n "), CT2A (str) .m_psz); – ajs410
' CA2T' konvertiert ** nicht in Unicode. Es wird in ein 'TCHAR' konvertiert, das Unicode-Zeichen darstellen kann oder nicht.' CA2 [ C] W' ist das Makro, das in Unicode konvertiert – IInspectable
Hinweis: Diese Antwort ist älter als die Unicode-Anforderung. Siehe die Kommentare.
Gerade sie werfen:
CString s;
const TCHAR* x = (LPCTSTR) s;
Es funktioniert, weil CString eine Cast-Operator hat genau dies zu tun.
Mit TCHAR wird Ihr Code Unicode-unabhängig; Wenn Sie nicht besorgt über Unicode sind, können Sie einfach char
anstelle von TCHAR
verwenden.
Wenn ich Ihre Methode versuchen, erhalte ich diesen Fehler: "Fehler Fehler C2664: 'CppSQLite3DB :: execDML': kann Parameter 1 von 'Const TCHAR *' zu 'const char * '". Meine Projekteinstellungen verwenden Unicode, aber die Funktion CppSQLite3DB :: execDML benötigt einen const char * -Parameter. – Attilah
Wie Mark sagt, müssen Sie von einem Unicode CString zu einem ANSI CStringA konvertieren: CStringA charstr (Unicodestr); Sie können dann CStringA zu einem Const char * – RichieHindle
Es gibt eine explizite Umwandlung auf CString LPCTSTR, so können Sie tun (vorausgesetzt Unicode ist nicht angegeben):
CString str;
// ....
const char* cstr = (LPCTSTR)str;
ich habe diese Fehlermeldung: Fehler C2440: 'Typ Umwandlung': Konvertierung von 'CString' zu 'LPCSTR' –
Diese Antwort ist korrekt für ANSI CString. Im Falle von Unicode CString, sehen Sie die akzeptierte Antwort. – amolbk
Wenn Ihr CString Unicode ist, müssen Sie eine Umwandlung tun, um multi- Byte Zeichen. Glücklicherweise gibt es eine Version von CString, die das automatisch macht.
CString unicodestr = _T("Testing");
CStringA charstr(unicodestr);
DoMyStuff((const char *) charstr);
Wenn ich dies verwende, bekomme ich diesen Fehler: "Fehler Fehler C2440: 'Initialisierung': kann nicht von 'CString' zu 'ATL :: CStringT
@Attilah: Danke für das fing ich an, hatte ich die Syntax falsch. Behoben. –
Ich hatte ein ähnliches Problem. Ich hatte einen char*
Puffer mit dem Namen .so drin.
Ich konnte die Variable char*
nicht in LPCTSTR
konvertieren. Hier ist, wie ich um ihn bekam ...
char *fNam;
...
LPCSTR nam = fNam;
dll = LoadLibraryA(nam);
I recommendo Sie TTOC von ConvUnicode.h verwenden
const CString word= "hello";
const char* myFile = TtoC(path.GetString());
Es ist ein Makro-Conversions zu tun pro Unicode
Die Tatsache, dass Sie ein Unicode-Programm zu bauen ist der Schlüssel zu diesem Problem - bitte fügen Sie diese Informationen zu der Frage hinzu. (oder jemand mit Rep tun es?) – Aardvark