CString in Integer ... nichts klappt...



  • Hallo Leute,

    Bräucht mal kurz eure Hilfe. Hab im Moment irgendwie eine Denksperre, oder mein Problem ist wirklich groß .. !?

    Also, ich müsste ein CString in ein Integer umwandeln. Doch egal wie ich das mache, es entsteht immer ein Compilerfehler.

    Mein Code:

    CTime time = CTime::GetCurrentTime();		
    		CString strHour, strMinute, strSecond;
    
    		// Stunden, Minuten und Sekunden auslesen und in Strings speichern
    		strHour.Format("%d", time.GetHour());
    		strMinute.Format("%d", time.GetMinute());
    		strSecond.Format("%d", time.GetSecond());
    
    		CString strHour1, strHour2, strMinute1, strMinute2, strSecond1, strSecond2;
    
    		// Stunden, Minuten und Sekuden in einzelne Zahlen trennen und in Strings speichern
    		strHour1.Format("%d", strHour.Left(1));
    		strHour2.Format("%d", strHour.Right(1));
    
    		strMinute1.Format("%d", strMinute.Left(1));
    		strMinute2.Format("%d", strMinute.Right(1));
    
    		strSecond1.Format("%d", strSecond.Left(1));
    		strSecond2.Format("%d", strSecond.Right(1));
    

    Jetzt bräuchte ich folgende Variablen als Integer:

    - strHour1
    - strHour2
    - strMinute1
    - strMinute2
    - strSecond1
    - strSecond2

    Doch egal wie ich das anstelle, es geht kein cast, kein Format etc.

    Habt ihr 'ne Idee ?

    Danke, FouKi



  • Warum nich so?:

    int hour, min, sec;
    
    hour=time.GetHour();
    min=time.GetMinute();
    sec=time.GetSecond();
    

    Die Abfragen liefern doch int- Werte zurück!

    LG.. Drea



  • Ja, stimmt schon. Aber dann kann ich nicht mehr CString::Left() bzw. CString::Right() benutzen...und das ist sehr wichtig!

    Danke, FouKi



  • Aber Modulo oder Division kennst du oder?

    hour1 = hour / 10;
    hour2 = hour % 10;
    ...
    


  • Kannste deine ints ja wieder in nen CString reinpacken 😃

    CString strInts;
    int i1=1,i2=2,i3=3;
    strInts.Format("Int1: %d Int2: %d Int3: %d", i1, i2, i3);
    

    Grüße Rapha



  • Und auch wenn ich :

    int hour1;
    hour1 = strHour.Left(1);
    

    mache, dann erscheint immer dieser Fehler

    error C2679: binary '=' : no operator defined which takes a right-hand operand of type 'class CString' (or there is no acceptable conversion)

    ???



  • Get auch net, was willste denn genau machen mit strHour.left(1);?

    [edit]
    Wenn du die erste Ziffer der Zahl willst:

    int i = atoi(strHour.left(1));?
    

    [/edit]



  • Rapha schrieb:

    Get auch net, was willste denn genau machen mit strHour.left(1);?

    Er will die Zeit in die einzelnen Stellen zerlegen und einzeln in integer Variablen speichern.

    @FouKi:
    siehe Drea's und meinen Post!!!



  • Siehe mein edit vom vorherigen Post (bin alleine draufgekommen 😃 )



  • @Rapha

    "Superdanke" echt. Mit atoi geht das also... 👍 👍 👍 😃

    Danke, FouKi



  • atoi == ascii to integer
    itoa == integer to ascii
    atof == ... float
    atol == ... long
    etc pp

    Ich möchte dir wärmstens die MSDN empfehlen. Und ein C++ Einsteiger Buch.



  • Hmm, ich habe 3 MFC/C++ Bücher und es wird nicht atoi() etc. erwähnt...

    Egal, was ich nocht nicht weiß, macht mich nur klüger... 😃



  • Aber das man einen String, egal wie er aussieht nicht in eine Zahlenvariable schreiben kann steht in jedem Anfänger Buch. In meinem stand sogar atoi explizit drin.

    Ausserdem leuchtet mir meine Lösung irgendwie mehr ein...
    Warum den Umweg über Strings gehen wenn man doch mit einer einfachen Rechnung aufs gleiche Ergebnis kommt.



  • Die mathematische Lösung ist klar die sauberere und schnellerere, aber ich denke jeder fängt mal dirty an :p 👍

    Ich kann mir vorstellen, warum Mathematik für die meisten Leute abschreckend wirkt



  • Du sagst es Rapha, Die Zahl 5 ist mir schon langsam langweilig... 😃


Anmelden zum Antworten