web-dev-qa-db-ger.com

Konvertieren von CString in const char *

Wie konvertiere ich in meiner Unicode-MFC-Anwendung von CString in const char*?

47
Attilah

Verwenden Sie zum Konvertieren eines TCHAR-CString in ASCII das Makro CT2A. Dadurch können Sie den String auch in UTF8 (oder eine andere Windows-Codepage) 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 gibt auch ein Makro, das von ASCII -> Unicode (CA2T) konvertiert werden kann, und Sie können diese in ATL/WTL-Apps verwenden, sofern Sie mindestens VS2003 verwenden.

Siehe MSDN für weitere Informationen.

64
Rob

Wenn es sich bei Ihrem CString um Unicode handelt, müssen Sie eine Umwandlung in Mehrbytezeichen durchführen. Glücklicherweise gibt es eine Version von CString, die dies automatisch tut.

CString unicodestr = _T("Testing");
CStringA charstr(unicodestr);
DoMyStuff((const char *) charstr);
20
Mark Ransom

Hinweis: Diese Antwort liegt vor der Unicode-Anforderung. siehe die kommentare.

Besetzt es einfach:

CString s;
const TCHAR* x = (LPCTSTR) s;

Es funktioniert, weil CString genau einen Cast-Operator hat.

Die Verwendung von TCHAR macht Ihren Code Unicode-unabhängig. Wenn Sie sich nicht mit Unicode beschäftigen, können Sie einfach char anstelle von TCHAR verwenden.

14
RichieHindle

Es gibt eine explizite Umwandlung von CString in LPCTSTR, sodass Sie dies tun können (vorausgesetzt, Unicode ist nicht angegeben):

CString str;
// ....
const char* cstr = (LPCTSTR)str;
4
Reed Copsey

Ich hatte ein ähnliches Problem. Ich hatte einen char*-Puffer mit dem .so-Namen darin.
Ich konnte die Variable char* nicht in LPCTSTR konvertieren. So habe ich es geschafft ...

char *fNam;
...
LPCSTR nam = fNam;
dll = LoadLibraryA(nam);
1
Mr.What

Ich empfehle Ihnen, TtoC von ConvUnicode.h zu verwenden

const CString Word= "hello";
const char* myFile = TtoC(path.GetString());

Es ist ein Makro zum Konvertieren per Unicode

0
felixjimcal

Generische Konvertierungsmakros (TN059 - Abschnitt "Andere Überlegungen" ist wichtig):

A2CW     (LPCSTR)  -> (LPCWSTR)  
A2W      (LPCSTR)  -> (LPWSTR)  
W2CA     (LPCWSTR) -> (LPCSTR)  
W2A      (LPCWSTR) -> (LPSTR) 
0
Amit G.