CString -> int



  • Hallo,

    ich arbeite mit Strings, die so aussehen:

    // 02:30.1
    // 04:15.6
    // ..
    // 07:45.4  d.h. 7 Minuten: 45 Sekunden. 4/10 Sekunden
    

    Jetzt muss ich die ganaue Sekundenzahl herausfinden:
    (7 * 60) + 45 + 0.4 = 465,4 Sekunden oder 4654 (1/10) Sekunden.

    Ich habe schon eine Lösung gefunden, aber die ist meiner Meinung nicht besoders gut:

    TCHAR *time = str.GetBuffer(255); // z.B. 02:30.1
    
    CString x, y, z;
    
    x.Insert(0, time[0]); // 0
    x.Insert(1, time[1]); // 2
    
    y.Insert(0, time[3]); // 3
    y.Insert(1, time[4]); // 0
    
    z.Insert(0, time[6]); // 1
    
    TCHAR *k = x.GetBuffer(255);
    TCHAR *l = y.GetBuffer(255);
    TCHAR *m = z.GetBuffer(255);
    
    int a = atoi(k);
    int b = atoi(l);
    float c = atof(m);
    
    j = ((a * 60) + b + (c/10)) * 10; // Ergebnis
    

    Mich würde es gern interessieren, ob's auch anders geht,

    Merci



  • GetBuffer ohne ReleaseBuffer == meory leak (nur so zur info) 😉

    warum nicht so:

    j = atoi((const char*)str.Left(2))*60 + 
    atoi((const char*)str.Mid(3,2)) +
    atoi((const char*)str.Right(1)/10) * 10;
    


  • CMatt schrieb:

    GetBuffer ohne ReleaseBuffer == meory leak (nur so zur info) 😉
    [/cpp]

    stimmt doch garned



  • Stimmt ja wohl 😉
    Der Destruktor von CString kümmert sich zwar um alles, aber so ist es trotzdem (theoretisch) ein Memory Leak (und ein Resourcenfresser noch dazu 😉 )).

    Grüße Rapha



  • atoi(CString)

    hätte auch funntioniert



  • @Unix-Tom: Wie meinst du das? Der String enthält nicht nur Zahlen



  • Ok, so klappt's:

    CString minuten = str.Left(2);    
    CString sekunden = str.Mid(3,2);   	
    CString zehntel = str.Right(1);    
    
    j = ((((atoi(minuten) * 60) + atoi(sekunden)) * 10) + atoi(zehntel));
    

    Nochmals Danke!



  • Rapha schrieb:

    Stimmt ja wohl 😉
    Der Destruktor von CString kümmert sich zwar um alles, aber so ist es trotzdem (theoretisch) ein Memory Leak (und ein Resourcenfresser noch dazu 😉 )).

    Grüße Rapha

    was is denn der unterschied zwischen nem praktischen und nem theoretischen memoryleak? 😕



  • EdiRitter schrieb:

    Ok, so klappt's:

    j = ((((atoi(minuten) * 60) + atoi(sekunden)) * 10) + atoi(zehntel));
    

    Da ist aber noch ein Fehler drin...
    [edit]...oder auch nicht, wenn das Ergebnis in Zehnteln sein soll. 🙂 [/edit]



  • Sovok schrieb:

    Rapha schrieb:

    Stimmt ja wohl 😉
    Der Destruktor von CString kümmert sich zwar um alles, aber so ist es trotzdem (theoretisch) ein Memory Leak (und ein Resourcenfresser noch dazu 😉 )).

    Grüße Rapha

    was is denn der unterschied zwischen nem praktischen und nem theoretischen memoryleak? 😕

    Weil dieser Speicher erst beim verlassen des Gültigkeitsbereiches wieder freigegeben
    wird, und somit wird Speicher von CString behalten der nicht mehr benötigt wird.



  • SirLant schrieb:

    Weil dieser Speicher erst beim verlassen des Gültigkeitsbereiches wieder freigegeben
    wird, und somit wird Speicher von CString behalten der nicht mehr benötigt wird.

    Genau 👍


Anmelden zum Antworten