Variablenumwandlung



  • Hallo.

    Ich bin ein C++ Neuling und ich suche Hilfe bei Variablenumwandlung.

    Gibts irgendwo eine Seite wo das anhand von einfachen Beispielen erklärt ist?

    Wichtig wäre z.b.
    Stringtypen in Zahlentypen wie Int und umgekehrt
    Zahlentypen untereinander, dezial in hex usw.
    Nullterminierte Strings in nicht nullterminierte Stings und umgekehrt.
    Char in Sting und Char in Int und umgekehrt
    Stringwerte auf die ein Zeiger verweist in AnsiSting und umgekehrt.

    Vielen Dank.



  • Renarion schrieb:

    Stringtypen in Zahlentypen wie Int und umgekehrt

    Siehe C++-FAQ: Einmal Zahl nach String und zurück.

    Zahlentypen untereinander, dezial in hex usw.

    Da gibt es nette manipulatoren für die C++ I/O-Streams.
    Beispiel:

    cout << 15 << hex << 15 << oct << 15; // Die Zahl 15 wird zuerst im Dezimal-Format, danach im Hexadezimal-Format und schließlich im Oktal-Format ausgegeben.
    

    Nullterminierte Strings in nicht nullterminierte Stings und umgekehrt.

    Wenn du mit "Strings" char* meinst, geht (zumindest auf einem sicheren Weg) afaik nur ersteres. Allerdings weiß ich nicht wozu das gut sein soll 😕

    Char in Sting und Char in Int und umgekehrt

    Siehe ebenfalls C++-FAQ Einmal Zahl nach String und zurück und/oder hier.

    Gruß Caipi



  • Hallo

    Vielen dank bin jetzt schonmal ein bisschen weiter gekommen.

    bei cout habe ich das aber nur auf dem bildschirm leider. wie mache ich dass er z.b statt "123" als klartext in einen sting zu schreiben nun die hex-zahl als klartext in den string schreibt, wenn ich von int auf str wandle?

    Ja ich meine char* also quasi die Zeiger auf ein nullterminierten String im Speicher.

    char* Test1='hallo welt';

    ist doch das selbe wie

    char test1[10]={'h','a','l','l','o',' ','w','e','l','t'} oder nicht?

    aber wenn ich schreibe
    char test[10] generiere ich ein array aus 10 charvariablen und nicht eine die 10 bytes groß ist?
    also könnte ich nur ein a bekommen wenn ich schreibe
    AnsiSting test5=test[2] und würde nicht "allo welt" bekommen also quasi den kompletten rest?

    Aber wie definiere ich jetzt eine char* mit einer größe von 10 bytes ?

    und was ist der unterschied zwischen char* test und char *test??



  • wie mache ich dass er z.b statt "123" als klartext in einen sting zu schreiben nun die hex-zahl als klartext in den string schreibt, wenn ich von int auf str wandle?

    Musst du dir selber für Hex, Okt und Binär rechnen, wennu die Typen aber verstehst sollte das in C++ kein Problem sein. Hier in den FAQs gabs mal zu Binär nen Tutorial Int in std::string glaub ich, das sollte dir helfen.

    char* Test1='hallo welt';

    ist doch das selbe wie

    char test1[10]={'h','a','l','l','o',' ','w','e','l','t'} oder nicht?

    Nein, denn mit char* erstellst du einen char-Pointer der auf den Speicherbereicht der Konstante "hallo welt" zeigt.

    char[n] ist dann das erstellen von n char-Elementen als Array. Du kannst auch:

    char test1[10]="Hallo Welt";
    

    schreiben, was schöner ausschaut.

    und was ist der unterschied zwischen char* test und char *test??

    Keiner, geschmackssache wie man es schreiben mag.

    Für die beiden restlichen Fragen bin ich gerade zu müde. 🤡



  • Renarion schrieb:

    aber wenn ich schreibe
    char test[10] generiere ich ein array aus 10 charvariablen und nicht eine die 10 bytes groß ist?

    Korrekt - du erzeugst ein Array mit Platz für 10 Zeichen (übrigens benötigt der String "Hallo Welt" Platz für 11 Zeichen - das letzte ist der Null-Teminator).

    also könnte ich nur ein a bekommen wenn ich schreibe
    AnsiSting test5=test[2] und würde nicht "allo welt" bekommen also quasi den kompletten rest?

    Nicht ganz - du bekommst ein "l" 😉 (der Index wird ab 0 gezählt)

    Aber wie definiere ich jetzt eine char* mit einer größe von 10 bytes ?

    Eine was? Du kannst höchstens einen char* definieren, der auf einen 10 Byte großen Bereich zeigt.



  • Renarion schrieb:

    bei cout habe ich das aber nur auf dem bildschirm leider. wie mache ich dass er z.b statt "123" als klartext in einen sting zu schreiben nun die hex-zahl als klartext in den string schreibt, wenn ich von int auf str wandle?

    Die FAQ mit "Einmal Zahl nach String und zurück" wurde ja bereits erwähnt. Und die Manipulatoren sollten bei Stringstreams auch funktionieren.

    Renarion schrieb:

    char* Test1='hallo welt';

    ist doch das selbe wie

    char test1[10]={'h','a','l','l','o',' ','w','e','l','t'} oder nicht?

    Nein. Mal abgesehen von den Fehlern, ist in der ersten Zeile ein Zeiger auf einen schreibgeschützten Bereich, welcher das Stringliteral "hallo welt" enthält. In der zweiten Zeile ist ein Array, welches mit "hallo welt" initialisiert wird. Dort kannst du lesen und schreiben wie du lustig bist, sofern du innerhalb der Arraygrenzen bleibst.

    Renarion schrieb:

    aber wenn ich schreibe
    char test[10] generiere ich ein array aus 10 charvariablen und nicht eine die 10 bytes groß ist?

    Du hast genau _eine_ Variable. Diese steht für ein Array, welches aus genau 10 Elementen vom Typ char besteht.

    Renarion schrieb:

    Aber wie definiere ich jetzt eine char* mit einer größe von 10 bytes ?

    char* ist immer gleich gross (zumindest auf der selben Plattform), da char* ein Zeiger ist. Und wie das bei Zeigern nunmal so ist, sie zeigen irgendwo hin. Damit so ein Zeiger auf einen Bereich mit 10 Bytes zeigt, musst du schon was dafür tun. Dh, du musst den Speicher vorher irgendwo her besorgen, zB mit automatischem oder dynamischem Speicher.

    void foo()
    {
        char a[10];              // 10 Zeichen (Bytes) automatischen Speichers
        char* pa = a;            // pa zeigt auf einen 10 Byte grossen Bereich automatischen Speichers
        char* pb = new char[10]; // pb zeigt auf einen 10 Byte grossen Bereich dynamischen Speichers
        pa = pb;                 // pa zeigt jetzt auf einen 10 Byte grossen Bereich dynamischen Speichers
        //...
        delete[] pb;
    }
    

Anmelden zum Antworten