String mit führenden Nullen zusammenbauen



  • Guten Abend,

    ich habe ein Programm, dass aus einer Dezimalzahl 0-255 die entsprechende Binärzahl ausgibt. Die Dezimalzahl wird eingelesen, umgewandelt und anschließend ausgegeben. Im Moment erfolgt diese Ausgabe nacheinander über cout, da die Umwandlungsfunktion rekursiv aufgerufen wird. Gebe ich z.B. 55 ein, liefert mir das Programm 110111 zurück, die Umrechnung funktioniert auch ohne Probleme.
    Meine Ausgabe soll allerdings immer 8-Bit breit sein, also ggf. mit Nullen vorne aufgefüllt werden: 110111 => 00110111 und dann als String weiter zur Verfügung stehen.

    Meine Frage ist daher, wie ich das am besten realisieren kann. Meine Idee war ein String der Größe 8 ("00000000"), in den dann die Werte reingeschoben werden. Leider weiß ich nicht, wie man sowas implementiert bzw. ob es überhaupt so geht.
    Über Denkanstöße bzw. Ideen würde ich mich freuen 🙂



  • svloga schrieb:

    Meine Idee war ein String der Größe 8 ("00000000"), in den dann die Werte reingeschoben werden

    Das ist möglich, fang einfach von hinten an den String zu befüllen.



  • Welchen Datentyp verwendest du für "String"?



  • Ich habe ein bisschen mit einem Array probiert, aber soll ein String sein, also std::string als Typ.

    Wie befülle ich den String denn? Kenne mich da leider nicht aus, würde mich über Hilfe freuen.



  • Etwa so:

    std::string bits(8, '0'); // String mit acht Nullen
    for(int i = 7; i >= 0; --i)
      bits[i] = whatever; // Deine Berechnungen...
    


  • sebi707 schrieb:

    Etwa so:

    std::string bits(8, '0'); // String mit acht Nullen
    for(int i = 7; i >= 0; --i)
      bits[i] = whatever; // Deine Berechnungen...
    
    std::string bits(8, '0'); // String mit acht Nullen
    std::cout<<bits; // 00000000, passt.
    for(int i = 7; i >= 0; --i){
      bits[i] = 1;
      }
      std::cout<<bits; // Hätte jetzt hier 11111111 erwartet.
    

    Wenn ich das so mache, erscheinen leider nur nicht-lesbare Zeichen im Ausgabestream. Warum?



  • svloga schrieb:

    bits[i] = 1;
    

    Du möchtest wahrscheinlich nicht den ASCII-Code 1 ("Start of Heading"-Zeichen) in den String schreiben, sondern des ASCII-Code für das Zeichen "1" (49), also:

    bits[i] = '1';
    

    Gruss,
    Finnegan



  • Oder am besten, dann musst du auch nicht selber rechnen:

    #include <bitset>
    #include <iostream>
    
    int main()
    {
        std::bitset<8> bits;
        bits = 42;
    
        std::cout << bits << '\n'; // 00101010
    }
    

Anmelden zum Antworten