in MFC Dialog hex einlesen



  • Hi, mal ne ganz dämliche Frage und für euch lächerlich:

    Also hab mir ein dialogbasierte mfc-anwendung gebastelt mit assistent. Darin 2 editboxen in denen ich Werte eingeben will, die dann weiterverwendet werden sollen nach Knopfdruck.
    Mein Problem sind nun die Membervariablen der 2 Boxen.
    Ich will die Werte als hex wert eingeben können: ffff!

    Wenn ich nun Value wähle und dann die variable als short deklariere, nimmt er ja nur ganze zahlen! Wenn ich meinen hexwert vorher umrechne in dezimal klappt auch alles wunderbar, aber wills ja als hex eingeben.

    Wenn ich anfange diese als CString zu definieren komme ich ja in teufelsküche mit sscanfs und sprintf usw... Suche schon den ganzen Tag im Netz aber finde keine Lösung (weil ich zu doof bin vllt) 😕
    Ich will ja nicht den hex wert der zeichen haben sondern die getippten zahlen und buchstaben ausm String haben... (ffff)
    Ich wäre unendlich dankbar, wenn ihr mir grad die 2-3 schritte von cstring "ffff" zu short "ffff" geben könntet...

    Danke im vorraus,
    Al



  • sollte voraus heissen...

    Übrigens benutze ich visual studio pro 2008!

    und zur erklärung nochmal ein kurzes Beispiel:

    Edit box 1: 1234
    Edit Box 2: 159b

    dann ok drücken, dann müssten die eingaben als hex interpretiert werden und nen algorithmus durchlaufen. Der funktioniert ja schon, und eingelesne werden die werte ja auch schon, über die OnBnClickedButton1()... nur werden die werte halt falsch interpretiert 😞



  • Hi!
    Check this out:

    CString str ( "FFFF" );
    
    	short num;
    
    	const char *p = str.operator LPCTSTR();
    
    	if ( 0==sscanf ( p, "%X", &num ))
    		return; // Error, String lässt sich nicht konvertieren.
    
    	str.Format ( "%hu", num );	// unsigned short
    	MessageBox(str);
    
    	str.Format ( "%hd", num ); // signed short
    	MessageBox(str);
    


  • CString line;
    char *stopstring;
    
    box.GetWindowText( line );
    
    int dec = static_cast<int> ( strtoul( line, &stopstring, 16 ) );
    


  • Danke schnomal.
    @Big Brother:
    Bei Dir haut er mir die Fehlermeldung beim kompilieren raus:

    error C2440: 'Initialisierung': 'const wchar_t *' kann nicht in 'const char *' konvertiert werden
    1> Die Typen, auf die verwiesen wird, sind nicht verknüpft; die Konvertierung erfordert einen reinterpret_cast-Operator oder eine Typumwandlung im C- oder Funktionsformat.
    error C2664: 'void ATL::CStringT<BaseType,StringTraits>::Format(const wchar_t *,...)': Konvertierung des Parameters 1 von 'const char [4]' in 'const wchar_t *' nicht möglich



  • Hast wohl _UNICODE definiert, dann probier mal das Zwitter TCHAR Ding:

    short num;
    	const  TCHAR *p = str.operator LPCTSTR();
    	_stscanf ( p, _T("%X"), &num );
    

Anmelden zum Antworten