Ausgabe als Hexadezimalwert



  • hallo leute,
    also ich habe leider nichts dazu hier im forum gefunden.mein problem ist folgendes:
    nehmen wir an ich haette eine ganz simple und sinnlose funktion:

    int f(int a)
    {
      return a;
    };
    

    wenn ich jetzt folgendes mache:

    cout << f(498) << endl;
    

    steht auf dem bildschirm 498; was ja auch beabsichtigt war.

    mach ich aber folgendes:

    cout << f(0x1F2) << endl;
    

    gibt er auch wieder 498 aus, was ja nicht unbedingt falsch waere.nur ich wuerde bevorzugen, dass er 0x1F2 ausgibt.

    gibt es dafuer eine loesung?

    p.s.:es wird erst zur laufzeit bekannt, ob der wert dezimal oder hexadezimal ist, falls das wichtig ist.



  • cout << hex << 0x1 << endl;
    

    mfg



  • bei Compile-Zeit wird das 0xX genau wie dezimale int-Literale aufgelöst.. du kannst das dann während der Runtime nicht mehr unterscheiden. Daher bleibt eigentlich nur der Weg über strings die entweder dec oder hex-Format haben.

    Du kannst dir dabei eine Klasse schreiben die den int wrappt..

    class Int
    {
      int val_;
      bool hex_;  //hex oder dec-Darstellung
      public: 
        Int(const string& val); //hier drin rausfinden, ob der string hex oder           
                                //dec-Format hat, hex_entsprechend setzen
                                //und val zuweisen
      friend ostream& opererator<<(ostream&os,const Int&i);
    
        //...    
    };
    
    ostream& opererator<<(ostream&os,const Int&i); //stream-ausgabe je nachdem ob     
    
    //hex_ true oder false ist (hex oder dec)
    


  • vielen dank fuer eure hilfe; mein problem ist hiermit geloest 🙂


Anmelden zum Antworten