Integer to String ???



  • 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)



  • Der int liegt auf dem Stack und ist unmanaged.
    Der Int16; Int32 oder Int64 liegt auf dem verwaltetn Heap.
    So hat mir das mein Dozent reingehämmert.
    Ich hab ihn damit richtig genervt.
    Der int ist ISO C++ und die anderen 3 sind C++/CLI

    Gruß Melle



  • Melle schrieb:

    Der int liegt auf dem Stack und ist unmanaged.
    Der Int16; Int32 oder Int64 liegt auf dem verwaltetn Heap.
    So hat mir das mein Dozent reingehämmert.
    Ich hab ihn damit richtig genervt.
    Der int ist ISO C++ und die anderen 3 sind C++/CLI
    Da der String^ in C++/CLI nur auf dem verwaltetn Heap abgelegt werden kann.
    Das ist leicht zumerken, durch das Zeichen Dach ^.
    Dadurch werden auch Zeiger auf den verwalteten Heap abgelegt und werden automatisch mit nullptr initialisiert.
    Das hat den Vorteil, dass die durch die Garbage Collection (Müllabfuhr) verwalteten werde.
    Das heißt, sobald der Zeiger nicht mehr benötigt wird, wird der Speicher wieder automatisch freigegeben und muss nicht mit delete selber Freigegeben werden.
    Der Arbeitsspeicher kann auch fragmentieren.
    Wie schon gesagt, dass ist der persönliche Stil.
    Ich bervorzuge die Garbage Collection nicht weil die neu ist.
    Ich finde die Freigabe des Arbeitsspeichers sehr nützlich, die gibt es nämlich in ISO C++ so nicht.
    Die Garbage Collection soll auch wirklich funzen. 🙄

    Musste mich selber Zitieren wollt noch ein bischen mehr schreiben.

    Gruß Melle



  • Da hinter Int32 auch in Deinem Beispiel kein Dach ist, wird der Wert genauso wie ein builtin-int nicht auf dem verwalteten Heap abgelegt. Darüberhinaus hielte ich es auch für höchst ineffizient, Werte, deren Storage kleiner ist als die einer verwalteten Referenz (Zeiger, Refcounter usw. liegen auch irgendwo rum) auf dem Heap anzulegen. Man muss die Performance ja auch nicht verschwenden 😉

    Nicht zuletzt liegen selbst in den reinen .NET-Sprachen (C#) Werttypen auf dem Stack.



  • Es liegt *nur* etwas auf dem Heap, wenn es ein ^ hat!!!

    Also

    Int32 i;
    

    und

    int i;
    

    ist gleichbedeutend und hat nix mit dem Heap zu tun.

    Genauso:

    Object o;
    

    liegt auch nicht auf dem Heap!



  • Guckst Du hier

    http://msdn2.microsoft.com/de-de/library/ms235267(VS.80).aspx

    Dann erkläre uns doch mal bitte den Unterschied zwischen...

    Double und double
    Boolean und bool

    usw....





  • Melle schrieb:

    Guckst Du da weita...

    http://download.microsoft.com/download/9/2/3/923d72fb-0076-49b6-96c4-aac1c255a60e/2023_S87_126OK.pdf

    Gelesen?

    Um den
    Unterschied zwischen Verweis- und Wertetypen zu verstehen –
    eine grundlegende Unterscheidung im CTS –, müssen Sie
    zunächst wissen, wie den Instanzen der einzelnen Typen Speicher
    zugeordnet wird. Im verwalteten Code gibt es dafür zwei Möglichkeiten1:
    auf dem Stack oder auf dem Heap, die beide von der
    CLR verwaltet werden.



  • Und was hat das mit dem Unterschied zwischen "Double" und "double" zu tun???

    System::Double == double
    System::Float == float
    System::Boolean == bool
    (und das gilt natürlich noch für viele andere Typen...)



  • Toller Unterschied.
    Leuchtet mir ein. 😮
    Was willst Du mir damit sagen 🙄
    Danke.


Anmelden zum Antworten