Integer to String ???



  • Also dann begeb ich mich mal hier hin ^^

    Wie konvertiere ich eine Zahl in einen String? Hab schon hier im Forum gesucht und 3 Möglichkeiten gefunden wie ich eine Zahl in einen String wandeln kann.

    das wäre dann mal hier:
    http://www.c-plusplus.net/forum/viewtopic-var-t-is-39488.html

    die Prozeduren funktionieren auch bei mir so isses ja nicht, nur mein Problem ist jetzt Folgendes:
    der String der dabei herauskommt, soll als item in eine Listview geschrieben werden, nur irgendwie will die Listview den nit haben. Wodran liegt das? Egal welche der 3 Methoden ich benutze die Listview meckert...ok die will ne String und das Ergebnis hier wird Char oder son komischer String, aber was muss ich tun um ne gewandelte Zahl schlicht und einfach in eine Listview zu schreiben? ^^
    Was ich vielleicht noch erwähnen sollte, ich benutze Visual Studio 2005, keine Ahnung obs euch hilft ^^

    Wäre sehr sehr seeeeehr dankbar um Antworten ^^

    Gruß,
    Bones



  • Ist es ein CString?

    CString x.Format("%i",integer y);
    

    zurück:

    integer y=atoi(CString x);
    


  • Nein ist kein CString, nur normaler String. Wobei mir die Lösung mit CString schon mal gesagt wurde, aber mein Compiler kennt das irgendwie nicht. Wenn ich schreibe
    CString mystr;
    Dann meint er das gäbs nicht, muss ich da noch was includen?
    Oder gibts auch ne Möglichkeit das mit normales Strings zu machen?



  • void OhneMfc()
    {
        int n = 123;
        char buffer[32]; // bzw. TCHAR buffer[32];
        sprintf(buffer, "%d", n); // bzw. _stprintf(buffer, _T("%d"), n);
    
        LVITEM lvItem = {};
        lvItem.mask = LVIF_TEXT;
        lvItem.iItem = INT_MAX;
        lvItem.pszText = buffer;
    
        ::SendMessage(hWndControl, LVM_INSERTITEM, 0, (LPARAM)(&lvItem));
    }
    
    void MitMfc()
    {
        int n = 123;
        char buffer[32]; // bzw. TCHAR buffer[32];
        sprintf(buffer, "%d", n); // bzw. _stprintf(buffer, _T("%d"), n);
    
        listCtrl.InsertItem(INT_MAX, buffer);
    }
    

  • Mod

    _stprintf nicht mehr verwenden!
    Besser _sntprintf bzw. _snprintf, damit kann kein Buffer overflow ausgelöst werden.



  • ich kenn als neues

    _stprintf_s


  • Mod

    Jo! Das ist die "sichere" Variante!

    Es wurde aber auch der alte CRT Funktionssatz erweitert um eine Funktion die die Länge des Puffers aufnimmt.



  • Hey danke Leute, von allein wär ich darauf wohl in jahren noch nit drauf gekommen, echt thX. Aber Ich hab da noch ein Problem, bzw. es tut sich dabei eins auf ^^ die Umwandlung funktioniert, also der compiler meckert mal nicht, aber ich kann dann den neuen string nicht in eine Listview schreiben. weiso nicht?

    Hier mal mein Code:

    char c[32], d[32];
    	sprintf(c, "%d", a);  
    	sprintf(d, "%d", b);
    
    	List->Items->Add("installed", 0);
    		List->Items[a]->SubItems->Add(c);
    		List->Items[a]->SubItems->Add(c);
    		List->Items[a]->Group = List->Groups[0];
    	List->Items->Add("not installed", 0);
    		List->Items[b]->SubItems->Add(d);
    		List->Items[b]->SubItems->Add(d);
    		List->Items[b]->Group = List->Groups[1];
    
    	a = a+2;
    	b = b+2;
    

    Die Variablen a und b sind 2 Globale int Variablen und werden bei Start des Programms auf a=1 und b=2 gesetzt. Wie man sieht sollen die Buffer c und d einfach als Item hinzugefügt werden, was aber nicht so richtig klappt.
    Die Listview ist auf Report_Style falls das von nützen ist.



  • Hallo

    Hast du nicht gesagt, dass du eine WinForm-Projekt hast? Dann wärst du nämlich wieder im falschen Subforum. Du solltest dir eventuell mal die kurzen Erläuterungen zu den einzelnen Foren durchlesen. dazu sind sie da.

    chrische



  • Wie jetzt? ^^ja da stand Windows Forms Anwendung, is das etwa immernoch falsch? ^^ ahhhhh ich bin so verwirrt, so viele verschiedene sachen...^^

    wo muss ich denn da hin?

    Aber kurz zu meiner Frage zurück: hat sich erledigt, habe was gefunden, habe es so gemacht:

    String ^c, ^d;
    c = String::Format("{0}", a);
    d = String::Format("{0}", b);
    

    Das funktioniert, jetzt müsste ich nurnoch rausfinden wie ich das umkehren kann, also aus string ne integer machen. Aber das kann ich ja dann die Fragen die im entsprechenden Forum sind ^^ sry leute



  • Dieser Thread wurde von Moderator/in CStoll aus dem Forum MFC (Visual C++) in das Forum C++/CLI mit .NET verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • Hallo

    Lies halt einfach die Beschreibung, die unter den Namen einzelnen Subforen steht.

    chrische



  • int foo = 42;
    
    String ^ bar = foo.ToString();  // int in einen String umwandeln
    
    int baz = System::Int32::Parse(bar);  // string in ein int umwandeln
    


  • cool danke, dacht nit dass das so einfach geht ^^

    hab jetzt folgendes geschrieben:

    String ^c, ^d;
    c = a.ToString();  
    d = b.ToString();
    
    int zahl = System::Int32::Parse(a);
    

    a ist 0 und b ist 1, das wandeln von zahl nach string geht, aber den string dann wieder in ne zahl geht irgendwie nicht. der Compiler schreibt:
    error C2665: "System::Int32::Parse": Durch keine der 4 Überladungen konnten alle Argumenttypen konvertiert werden.

    Woran kann das liegen??? 😕



  • Bones schrieb:

    Woran kann das liegen??? 😕

    Evtl. daran dass Du versuchst eine Zahl in eine Zahl zu konvertieren? 😉



  • MIST xD

    Sorry hab anstatt die String Variable ausversehen die Int Variable reingesteckt, es geht jetzt ^^ danke nochmal



  • Ich würde das so machen, dadurch hast Du alles auf dem Verwalteteb Heap.
    In dem anderen Listing hast Du managed und unmanaged Code.
    Natürlich können Programme aus einer Mischung von managed und unmanaged Code bestehen, dass gehört dann zum Guten oder Schlechten Programmierstil.
    Der Unterschied besteht darin, dass die eine Variable auf dem Stack landet und die andere auf dem verwalteten Heap.
    Die eine wird von der Garbage Collection verwaltet die andere nicht.
    Hier nun mein Vorschlag.

    {
        Int32 foo = 42; 
    
        String^ bar = Convert::ToString(foo);  // int in einen String umwandeln 
    
        Int32 baz = Convert::ToInt32(bar);  // string in ein int umwandeln 
    }
    

    System:: kannst Du weglassen, da das doch sicherlich als namespace vereinbart wurde.
    Lässt sich so besser lesen.

    Gruß Melle



  • Ein Int auf dem verwalteten Heap? Nur wegen der Konsistenz, oder was soll das für Vorteile haben?! 😕



  • Wo liegt denn da bitte ein int auf dem verwalteten Heap?



  • Melle hat dies behauptet, nicht ich 😉

    Aber es stimmt natürlich, dass Int32 ein Werttyp ist. Insofern sehe ich zwischen dem vorherigen Beispiel keinen Unterschied zu dem hier, oder resultiert die Verwendung von builtin-Datentypen wie int automatisch in der Generierung von Unmanaged Code? (Ich verwende C++/CLI so selten)


Anmelden zum Antworten