CString in Int Convertieren

Hallo,

ich such jetzt schon 2 Stunden im Netz nach einer Möglichkeit, wie ich einen CString unter Visual Studio 2008/ MFC/ C++ in einen Integer wandeln kann.
Ich brauch ein atoi(), dass mit CStrings umgehen kann.

Habe nichts gefunden. Einige meinen, dass es mit atoi gehen soll, aber da bekomm ich den fehler, dass es nicht möglich sei, ein CString in ein char* umzuwandeln.

Wer hat den CString überhaupt erfunden?
Nach meiner Erfahrung macht der überall nur Probleme.

Das Problem ist, dass ich aus einer Combobox Zahlen auslesen will. Entweder muss ich dann den Index manuell zuweisen oder ich muss irgendwie den Inhalt als String auslesen und konventieren.
Doch genau das geht nicht, weil die MFC nen CString statt char-array einsetzt :frowning:

Kann mir jemand bitte helfen?
Wie kann ich nen CString in nen Integer parsen?

Hallo,

aber da bekomm ich den fehler, dass es nicht möglich
sei, ein CString in ein char* umzuwandeln.

Kann ich nicht glauben. Hast Du das mal so versucht:

CString num("123");
int got = atoi((const char\*) num);
cout 
Die atoi() ist übrigens nicht die allerhellste, da gibt es auch noch die strtol():
http://cplusplus.com/reference/clibrary/cstdlib/strtol/

lG
Martin B

CString num(„123“);
int got = atoi((const char*) num);
cout

csSoftVolumeValue ist CString
iSoftVolumeValue ist integer

m_iSoftVolumeValue = atoi((const char*) m_csSoftVolumeValue);

geht nicht:
„Error 2 error C2440: ‚type cast‘ : cannot convert from ‚CString‘ to ‚const char *‘ c:\projects…cpp 258“

Die atoi() ist übrigens nicht die allerhellste, da gibt es
auch noch die strtol():
http://cplusplus.com/reference/clibrary/cstdlib/strtol/

geht leider genauso wenig, wegen CString

mfg
peter

Schönen Tag.
Das http://www.c-plusplus.de/forum/viewtopic-var-t-is-39… schon mal probiert? str.GetBuffer sollte funktionieren.
Liebe Grüße.
Alex
P.S.: Hab ich durch die Googlesuche mit den naheliegenden Begriffen „cstring cast char“ gefunden.

http://www.c-plusplus.de/forum/viewtopic-var-t-is-39…
schon mal probiert? str.GetBuffer sollte funktionieren.

Habs probiert. Leider bekomme ich so nur das erste Zeichen, wenn ich das wie dort gezeigt in ein char-array mit sprintf schreibe - bei beiden varianten:

sprintf(strTemp,"%s\n", (LPCTSTR)m\_csSoftVolumeValue);
sprintf(strTemp,"%s\n", m\_csSoftVolumeValue.GetBuffer(255));

Bin dadurch aber auf folgende Idee gekommen. Ich kopier einfach jedes Zeichen einzeln:

int CStringToInt ( CString csString )
{
 int iLenght = CString::StringLength(csString);
 char\* strBuff = (char\*)calloc ( sizeof(char), iLenght+1 );
 int i = 0;

 for ( i=0; i

Vielen Dank. Jetzt hab ich endlich das Problem gelöst :smile:

Mit den Strings wird man ja ganz wuschig: CString, WCHAR, XCHAR, CHAR\*, LPCTSTR, ...
Und jede Funktion verlangt nen anderes Format - total inkonsequenz :expressionless:

Mit freundlichen Grüßen
Peter

Hallo Peter!

m_iSoftVolumeValue = atoi((const char*) m_csSoftVolumeValue);

geht nicht:
„Error 2 error C2440: ‚type cast‘ : cannot convert from
‚CString‘ to ‚const char *‘ c:\projects…cpp 258“

Ich habe das eigenhändig auf VC6 noch so gemacht, aber kann ja sein, dass MS das jetzt geändert hat…
Es MUSS aber irgendwas geben, um den Char-Zeigern rauszukriegen, wie bei std::string die

string s;
int got = atoi( s.c\_str())

Die atoi() ist übrigens nicht die allerhellste, da gibt es
auch noch die strtol():
http://cplusplus.com/reference/clibrary/cstdlib/strtol/

geht leider genauso wenig, wegen CString

Die braucht natürlich genauso den char*, umwandeln muss sein. Vielleicht gibt es ja eine Funktion wie s.AsInt(), die eine Integer zurückgibt? Dann würdest du die atoi() gar nicht brauchen. Oder es gibt eine globale AsInt() als Template, die verschiedene Datentypen kriegen kann.
Eine Referenz für CString hast Du? Sonst hier
http://www.microsoft.com
die Suchfunktion verwenden.

lG
Martin B

Hi,

Habs probiert. Leider bekomme ich so nur das erste Zeichen,
wenn ich das wie dort gezeigt in ein char-array mit sprintf
schreibe - bei beiden varianten:

nun, das dürfte wohl daran liegen, dass dein Projekt mit Unicode-Unterstützung übersetzt wurde und der von CString verwaltete String ist dann halt kein „normaler“ ASCII String, der per atoi oder strtol verarbeitet werden kann.

Gruss
norsemanna