CString zu Int
-
hustbaer schrieb:
Ja, ich mach auch immer nen Dialog auf wenn ich nen String in eine Zahl konvertieren möchte...
?? ES_NUMBER is doch ein style fuer eine editbox - dh beim erstellen einfach ES_NUMBER dazu schon nimmt die box nur zahlen an, und man braucht nicht mehr ueberpruefen ob wirklich eine zahl eingegeben wurde
-
hustbaer schrieb:
p.S.: die Funktionen kennen alle kein CString, aber da sie mit const char* bzw. const wchar_t* arbeiten kann man sie genausogut mit CString verwenden.
Ich stehe vor dem gleichen Problem wie der OP, komme aber keinen Schritt weiter.
Ich habe ausprobiert:
CString n = "2004"; int i = atoi(n.GetBuffer(0));
liefert mir
Konvertierung des Parameters 1 von 'wchar_t *' in 'const char *' nicht möglich
1> Die Typen, auf die verwiesen wird, sind nicht verknüpft; die Konvertierung erfordert einen reinterpret_cast-Operator oder eine Typumwandlung im C- oder FunktionsformatDann habe ich die 'ATL and MFC String Conversion Macros' gefunden mit dem ich anshceint von CString nach char* konvertieren kann.
Der folgende Code (anders Beispiel)CString PhaseText; m_WndEditPhase.GetWindowTextW(PhaseText); LPCSTR pPhaseString = T2A( PhaseText ); m_Phase = atoi(pPhaseString);
ergibt jedoch den Fehler
error C2065: '_lpw': nichtdeklarierter Bezeichner
error C2065: '_convert': nichtdeklarierter Bezeichner
error C2065: '_acp': nichtdeklarierter BezeichnerJetzt stehe ich mit einem Simplen Problem CString -> int und nicht der geringsten Lösung ziemlich ratlos dar und hoffe auf eine Lösung.
Matthias
-
In einem andere Forum stand die Lösung (http://www.codeguru.com/forum/archive/index.php/t-256785.html)
m_Phase = _ttoi(PhaseText);allerdings überhaupt nicht selbsterklärend...
Matthias
-
std::string string = "2004"; std::ostringstream ss(string); int integer = 0; ss >> integer;
Das wäre Std.
Und es liegt daran das du UNICODE definiert/aktiviert hast, dass der dir bei
CString string = "2004"; int i = atoi(string);
eine Fehlermeldung bringt.
-
(D)Evil schrieb:
std::string string = "2004"; std::ostringstream ss(string); int integer = 0; ss >> integer;
Das wäre Std.
viel schönerer Code. Bleibt nur die Frage wie ich aus einem CString einen string mache.
(D)Evil schrieb:
Und es liegt daran das du UNICODE definiert/aktiviert hast, dass der dir bei
CString string = "2004"; int i = atoi(string);
eine Fehlermeldung bringt.
Das war mir klar.
Matthias
-
? Naja du kannst entweder hingehen und dir einen std::basic_string von TCHAR anlegen um auch da auf Zeichensatz Unabhängigkeit zu setzen oder du nimmst bei UNICODE halt nen std::wstring...
CString my_c_string("Das ist mein String"); std::wostringstream ss(my_c_string); int integer = 0; ss >> integer;
hab jetzt aber nicht nachgeguckt ob stringstream nen string oder nen const (w)char(_t)* haben will, wenn man direkt nen string als Ausgangswert setzt.
-
pospiech schrieb:
Dann habe ich die 'ATL and MFC String Conversion Macros' gefunden mit dem ich anshceint von CString nach char* konvertieren kann.
Der folgende Code (anders Beispiel)CString PhaseText; m_WndEditPhase.GetWindowTextW(PhaseText); LPCSTR pPhaseString = T2A( PhaseText ); m_Phase = atoi(pPhaseString);
ergibt jedoch den Fehler
error C2065: '_lpw': nichtdeklarierter Bezeichner
error C2065: '_convert': nichtdeklarierter Bezeichner
error C2065: '_acp': nichtdeklarierter BezeichnerJetzt stehe ich mit einem Simplen Problem CString -> int und nicht der geringsten Lösung ziemlich ratlos dar und hoffe auf eine Lösung.
Matthias
Hast du dir den MSDN-Eintrag überhaupt durchgelesen? Dort steht doch, daß du für die Makros noch ein 'USES_CONVERSIONS' am Anfang der entsprechenden Funktion benötigst.
-
CStoll schrieb:
Hast du dir den MSDN-Eintrag überhaupt durchgelesen? Dort steht doch, daß du für die Makros noch ein 'USES_CONVERSIONS' am Anfang der entsprechenden Funktion benötigst.
Ich habe folgende Seite gelesen:
http://msdn2.microsoft.com/en-us/library/87zae4a3(VS.80).aspx
dort taucht 'USES_CONVERSIONS' auf der gesamten Seite nicht auf. Ich weiß daher nicht was du genau meinst.Matthias
-
Putz dir doch mal bitte die Brille und schau genauer hin:
When using an ATL string conversion macro, specify the USES_CONVERSION macro at the beginning of your function in order to avoid compiler errors. For example:
void func( LPSTR lpsz ) { USES_CONVERSION; ... LPWSTR x = A2W(lpsz) // Do something with x ... }
(das steht gaanz unten auf der Seite ;))
-
Ups - ich hatte es zum Suchen in Firefox angegeben und der hat mir keine gesagt das es nicht vorhanden wäre. Jetzt findet er es... Trotzdem Danke.
Matthias
-
(D)Evil schrieb:
std::string string = "2004"; std::ostringstream ss(string); int integer = 0; ss >> integer;
Ich habe das gerade mal getestet, bekomme aber die Fehlermeldung
no match for ‘operator>>’ in ‘ss >&
das würde bedeuten, dass gerade die Umwandlung nicht implementiert ist.
Verwirrt...Matthias