CString ascii value to int (and back)



  • Guten Tag, ich benötige dringend Hilfe bei meinem Problem.

    Ich möchte einen variabel großen CString auslesen, und den ASCII code (Beispiel: Zeichen Q = 51 ) von jedem darin enthaltenen Zeichen in ein INT-array schreiben.

    Meine Kenntnisse in C++/MFC sind leider gering, ich hoffe, dass ihr mir helfen könnt 🙂



  • Hab jetzt eine Lösung für mein Problem gefunden:

    int asciiwert = CStringvariable.GetAt(0);

    Jetzt habe ich allerdings ein anderes Problem. Ich möchte den das Zeichen (dessen ASCII-wert in der int-variable gespeichert ist) wieder in das entsprechende Zeichen umwandeln und in den CString schreiben. Ich hatte gehofft, dass es auf folgende art funktioniert:

    char zeichen = asciiwert;
    CString2 = zeichen;

    Jedoch scheint MFC überhaupt nichts mit char anfangen zu können, da das Programm dabei sofort abstürzt. Kann mir da jemand weiterhelfen? 🙂



  • Du solltest dich mal schlau machen, was die Unterschiede sind zwischen Zeichen (char) und Zeichenkette (String). Dann dürfte auch klar werden, daß du zum Zurückschreiben auch wieder einen Index-Zugriff benötigst:

    int wert = str.GetAt(0); // oder str[0]
    ...
    str.SetAt(0,(char)wert);
    


  • das was du möchtest geht schon nur das CString mit int nichts anfangen kann, also kann man das so machen

    CString A(_T("Hallo"));
    	int b = A.GetAt(0);
    	CString C;
    	C += static_cast<TCHAR>(b);
    

    über Sinn und Unsinn dieser Übung lass ich mich mal nicht aus 😃



  • irgendwie klappt das umwandeln vom int_array zum Output (CString) nicht. beim button-klick stürzt das programm ab 😕 Die letzte forschleife muss das Problem sein, ich kann aber mit der fehlermeldung leider nichts anfangen:

    Fehlermeldung: http://dl.dropbox.com/u/2138884/Fehler.png

    Input und Output sind CStrings

    UpdateData(true);
    	int inputlaenge = Input.GetLength();
    	int laengeascii = inputlaenge;
    	int *ascii = new int[laengeascii];
    
    	for (int i = 0; i < laengeascii; i++){
    		ascii[i] = (int)Input[i];}
    
    	for (int i = 0; i < laengeascii; i++){
    		Output.SetAt(i,(char)ascii[i]);}
    	UpdateData(false);
    


  • Hast du auch dein Output auf die antsprechende Größe gebracht die du da rein schreiben willst, denn SetAt() schreibt stur in den CString und wenn der NULL Größe hat, fliegt dir dein Programm um die Ohren, also mach es entweder mit '+=' denn da wird der string vergrößert oder mach Output entsprechend groß das du nicht drüber raus schreibst

    PS: so wie das stück Source aussieht, werden paar Variablen nur erstellt um da zu sein das optimiert dir natürlich der Kompiler weg deswegen auch die Fehlermeldung



  • Kannst du mir dafür vielleicht ein Beispiel geben? Kenn mich leider nicht so gut damit aus.
    Ich hab es jetzt so

    Output = new char[inputlaenge];
    

    versucht, das übertragen in Output (Cstring) klappt auch, aber am Ende hab ich immer Müll dran: "ýýýý««««««««îþîþ"
    wie kriegt man das weg?

    Es sieht jetzt so aus:

    UpdateData(true);
    	int inputlaenge = Input.GetLength();
    	int *ascii = new int[inputlaenge];
    
    	for (int i = 0; i < inputlaenge; i++){
    		ascii[i] = (int)Input[i];}
    
    	Output = new char[inputlaenge];
    	for (int i = 0; i < inputlaenge; i++){
    		Output.SetAt(i,(char)ascii[i]);}
    	delete ascii;
    	UpdateData(false);
    


  • CTecS schrieb:

    Hast du auch dein Output auf die antsprechende Größe gebracht die du da rein schreiben willst, denn SetAt() schreibt stur in den CString und wenn der NULL Größe hat, fliegt dir dein Programm um die Ohren, also mach es entweder mit '+=' denn da wird der string vergrößert oder mach Output entsprechend groß das du nicht drüber raus schreibst

    PS: so wie das stück Source aussieht, werden paar Variablen nur erstellt um da zu sein das optimiert dir natürlich der Kompiler weg deswegen auch die Fehlermeldung

    Ich weiß nicht wie ich das benutzen muss, so funktioniert es jedenfalls nicht.

    Output += Output[inputlaenge]
    

    Mein Problem hat sich zwar gelöst indem ich einfach

    Output = Input;
    

    gesetzt habe, aber kannst du mir vielleicht ein Beispiel geben wie man die Länge von einem CString manuell setzt?



  • ich bin davon ausgegangen das die Variable Output ein CString ist, da du ja wohlweislich einfach mal die definition nicht mit gepostet hast. Wäre es ein CString gewesen dann hätte es mit '+=' auch Funktioniert.

    Output += Output[inputlaenge]
    

    ist ja nun mal totaler Unsinn da du damit nur ein zeichen kopierst außerdem haben beide Variablen den gleichen Variablennamen was auch wieder nicht geht.

    Output = Input;
    

    Das muß ja gehen, da beides CStrings sind und du einfach nur eine Kopie erstellst.

    Vielleicht solltest du dir erstmal die Grundlagen aneignen


Anmelden zum Antworten