cstring in char[]
-
Hi zusammen,
weiss jemand wie man einen CString in eine char[] umwandelt? Unicode wird verwendet.
Vielen Dank.
-
CString::GetBuffer()
-
Hallo,
also das ist ja ein vielbesprochenes Thema, wozu ich schon viel im Netz gefunden habe, doch keine der vielen Varianten funktionierte bei mir. Das Projekt ist in Unicode, und der CStringW soll in ein nicht-Unicode char-Array konvertiert werden.
Der bisher erfolgreichste Versuch war dies hier:CString help(_T("Hallo Welt")) char tBuf[24*30]; memset(tBuf,0,sizeof(tBuf)); sprintf(tBuf,"%s",static_cast<LPCTSTR>(help));//Das Problem dabei ist, das nur das erste Zeichen des CString in den char array kopiert wird. Also in dem Fall "H" der Rest ist 0. Könnt ihr mir sagen, wie es richtig geht?
Grüße
Micha
-
CString verwendet TCHAR
Bei einer Unicode-Applikation ist TCHAR gleich wchar (also 16bit-Zeichen)
Du benötigtst eine Umwandlung des Stringinhalts in char (also 8bit-Zeichen) ?Nur mit einem cast wird das nicht funktionieren!
Ich würde die Win-API-Funktion WideCharToMultiByte() verwenden.
Vielleicht gibt es auch eine äquivalente CString-Methode?HTH
Martin
-
Danke für deine Antwort. Ich hab zwar die Funktion nicht genutzt, sie hat mich aber auf die richtige Fährte gebracht:
W2CA() habe ich genutzt.
Hier ein Beispiel:CString wstr("HalloWelt"); char tBuf[10]; memset(tBuf,0,sizeof(tBuf)); USES_CONVERSION; LPCSTR lp=W2CA(wstr); strcpy(tBuf,lp);Micha
-
Sicherer wäre die Verwednung von T2CA! Dann würde Dein Projekt sich auch kompilieen lassen, wenn Du auf MBCS umstellst.
-
Statt den Makros kann man auch direkt CStringA verwenden.
-
sri schrieb:
Statt den Makros kann man auch direkt CStringA verwenden.
Und dann stellst Du auf UNICODE um...

-
hi zusammen,
also bei mir hat die Umwandlung über CStringA wunderbar geklappt. Danke für den Tip.
-
theta schrieb:
sri schrieb:
Statt den Makros kann man auch direkt CStringA verwenden.
Und dann stellst Du auf UNICODE um...

Was meinst Du damit? Ab und zu kommt man auch unter Unicode nicht umhin, auch mal mit Ansi-Strings arbeiten zu müssen. Und da ist CStringA abseits der Makros eine einfache und saubere Alternative.
Das gleiche gilt übrigens auch bei Nicht-Unicodeanwendungen. Hier kann man mit CStringW auch schnell mal Sachen nach Unicode konvertieren.