sprintf(buffer, "%03X", tmp) in C++



  • Ich moechte gern sprintf(buffer, "%03X", tmp) in C++ realisieren. Im Moment transformiere ich normal mit stringstream << hex << tmp und mittels substr hole ich mir umstaendlich die letzten 3 Zeichen. Geht das einfacher? Boost-Loesungen sind willkommen, aber wuerde gern drauf verzichten.


  • Mod

    Das macht man mit fill und width:

    #include <iostream>
    #include <cstdio>
    #include <iomanip>
    using namespace std;
    int main()
    {
      int a = 12;
      printf("%03X", a);
      cout << '\n' << setfill('0') << setw(3) << hex << a << '\n';
    }
    

    P.S.: Lustig: Meine Standardbibliothek schreibt bei printf die Hex-Zahlen mit Großbuchstaben und bei cout mit Kleinbuchstaben.



  • SeppJ schrieb:

    P.S.: Lustig: Meine Standardbibliothek schreibt bei printf die Hex-Zahlen mit Großbuchstaben und bei cout mit Kleinbuchstaben.

    printf schreibt bei %X mit Groß- und bei %x mit Kleinbuchstaben.



  • Hmm, verstehe ich das jetzt falsch, ich hatte an so etwas gedacht:

    number %= 4096;
    char buffer[4] = {};
    const char hexChars[] = {'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
    for(int i=2;i>=0;--i)
    {
        buffer[i]=hexChars[number%16];
        number/=16;
    }
    

    P.S.: Lustig: Meine Standardbibliothek schreibt bei printf die Hex-Zahlen mit Großbuchstaben und bei cout mit Kleinbuchstaben.[/quote]

    printf("%03X", a);
    cout << '\n' << std::uppercase << setfill('0') << setw(3) << hex << a << '\n';
    

    Komisch, bei mir ist es anders herum 🤡 .



  • Argh, natürlich kommt da ein kleines x bei printf hin.
    Naja, Bashar war sowieso schneller.



  • mapper schrieb:

    Naja, Bashar war sowieso schneller.

    Aber ich kannte std::uppercase nicht.



  • Danke fuer die Antworten, das spart schon mal eine Zeile. Leider muss ich immer noch einen Stream benutzen. Dachte eher an sowas wie to_string, wo man die Basis mit angeben kann. Werde ich wohl selbst implementieren. Aber uppercase , fill und setw sind sehr hilfreich.


Anmelden zum Antworten