Typ + Basisumwandlung



  • Bitte um ein kleines Beispiel...ich komm nicht drauf

    Wie überprüf ich denn ob eine Zahl oder ein Buchstabe im Editfeld steht?
    Müsste dann nämlich ne Messagebox("keine Buchstaben!!!"); oder sowas ausgeben;



  • Du kannst für jedes Feld OnChangeSel anfangen und so direkt verhindern, dass Buchstaben in dem String vorkommen. Oder du legst mit dem Klassenassisstenten für jede Editbox Membervraieablen an und gibts diesen den gewünschten Typ. Dann prüft der das automatisch, bzw. macht aus allen falschen Sachen einfach ne 0.



  • Ja das ist ja unter anderem ein Problem...sobald ich z.B für IDC_EDIT1 eine Membervariable m_ed1 (float) anlege bekomm ich beim Ausführen die Meldung....Der Vorgang "written" konnte nicht durchgeführt werden! Wenn ich m_ed1 wieder lösche funktioniert es wieder?



  • benennen mal die Ressouce um, z.B IDC_WERT oder was auch immer
    Ersten sollte man eh aussagekräftige Namen verwenden, zweites gibt es bestimmt Ressourcennamen, die sozusagen vorbelegt sind und daher nicht "geschrieben" werden können.



  • Also bevor du sagst ich hätte es nicht versucht...

    Natürlich ändert sich nix wenn ich die Ressourcen umbenenne...(IDC_XYZ)

    Nun gut...

    Also der Code funktioniert so wie ich ihn oben gepostet habe...GetDlgItemText liest die Felder aus und schreibt(OutFile.WriteString(strstring)) sie mir ordentlich formatiert in einen txt file...nur müsst ich mit einem Teil der Werte noch eine einfache Berechnung durchführen und zusätzlich noch in eine Hexzahl umwandeln...

    also Männer...hat das denn noch niemand so gemacht...? 🙂



  • CString sWndText;
    pEdit->GetWindowText(sWndText);
    double value = atof(sWndText); //String in double
    

    Wenn es keine Zahl war kommt 0 raus, wenn das nicht reicht hilft nur selbst den String nach Zeichen zu durchsuchen, zumindest fällt mir jetzt keine Methode ein die das macht.



  • Gut...doch wie ändere ich den jeden einzelnen Wert in eine Hexzahl?

    Beachtet dabei doch bitte die Voraussetztungen im 1.Post(Code)

    z.B.9763(Wert in IDC_WERT1) wird zu 2623h



  • Selbst ist die Frau^^

    Da wirst dir wohl ne Methode schreiben müssen die dir das macht oder du googelst.

    Alternativ kannst die Frage mal im C++ Forum stellen, weil ich nicht weis ob das evtl mit cout und/oder cin per Umleitung in einen String funktioniert per Formatierung.



  • andere Vorschläge?

    Kann man ohne Membervariablen sprich mit den Werten aus den boxen einfach so rumrechnen oder widerspricht das dem Grunprinzip von GetDlgItemText?



  • GetText, das liefert dir nen CString, du kannst das hart casten und rumrechnen, klar, doch da wird nur Rotz rauskommen. Um eine Umwandlung kommst nicht rum.
    Wo ist das Problem atof zu benutzen?



  • Weil ich ja mit den IDC_ arbeite...keine Membervariablen anlegen kann(Fehler)...und ich Hilfe in meinem speziellen Fall bräuchte...atof,atoi,itoa...ist ja soweit klar aber ich müsste doch dann mit den Mv arbeiten...right?



  • ah jetzt weis ich was du verwechselts.

    Machs doch so:

    //Zeiger auf das Steuerelement holen
    CEdit* pEdit = (CEdit*) GetDlgItem(IDC_MY_EDIT);
    if (pEdit)
    {
    	CString sWndText;
            //Text aus Steuerelement holen
    	pEdit->GetWindowText(sWndText);
            //in Zahl umrechnen
    	double value = atof(sWndText);
    
            //usw. Berechnungen
    }
    


  • erstmal herzlichen Dank an Pellaeon

    Also...es geht jetzt erstmal so wie ich das will...aber nur weil ich das komplette
    Programm auseinader gerupft hab 😡 und m_Variablen angelegt hab...

    So und nun sind die Member(vom Typ

    double
    

    )...das muss so sein 🙂 float wäre auch ok!

    Nun nochmal zu der Sache mit der Umwandlung in eine Hexzahl...

    Ich versuche:

    char zahlHex[5];  // 0x + 2 Ziffern + \0
        double zahlDez = 83999;
    
    	sprintf(zahlHex, "%X", zahlDez);
    
    	SetDlgItemText ( IDC_E_432 , zahlHex ) ;
    

    ich bekomm aber nur die 0 angezeigt im IDC...ändere ich jedoch

    double
    

    in

    [int bzw. long int]
    

    funktionierts....hm hat das was mit sprintf zu tun?

    Kann man dem in irgendeiner Art und Weise Abhilfe schaffen? WIE?



  • das ist doch sicher ein elementarer Fehler...keiner eine Antwort?



  • MSDN schrieb:

    When used with the o, x, or X format, the # flag prefixes any nonzero output value with 0, 0x, or 0X, respectively

    Wenn ich richtig auffasse, dann wandelt das nicht in Hexzahl um, sondern schreibt einfach ne 0 davor, wenn die Zahl keine 0 ist.



  • edit 2 war rotz vergiss es^^ ham mich verguckt

    //
    edit 3^^: kannst nur mal probieren ob es am double liegt, mach mal nen int drauß und schau ob das geht



  • jo liegt am double, muss ein int sein



  • ja das geht...hab ich doch geschrieben

    Bsp.: 30135 = 75B7h .....



  • mach dir aber weiter keinen Kopp...ich hab nu einen Konvertierungsfaktor eingeführt...und arbeite dann weiter mit unsigned int

    rotzdem danke 🙂


Anmelden zum Antworten