sprintf / char* allgemeine fragen



  • hallo,
    könnte mir jemand erklären was folgender Code macht?
    warum der cast auf (char*) und was bedeutet %02x konkret eigentlich?

    string foo;
        foo.resize(6);
        sprintf((char*) &foo[0], "%02x%02x%02x", r, g, b);
    


  • cryps schrieb:

    warum der cast auf (char*) und was bedeutet %02x konkret eigentlich?

    string foo;
        foo.resize(6);
        sprintf((char*) &foo[0], "%02x%02x%02x", r, g, b);
    

    %02x heißt "hexadezimale Ausgabe, zweistellig, gegebenenfalls mit führenden nullen". r,g,b dürften demnach unsigned chars sein. Der cast auf char erfolgt weil sprintf eben einen char-pointer erwartet, vermutlich wird das benutzt um eventuelle const-ness wegzucasten.

    Alles in allem ein ziemlich wüstes C-Konstrukt. Geht in C++ dann eher mit stringstreams:

    stringstream sstr;
    sstr << setw(2) << setfill('0') << r << g << b;
    string foo = sstr.str();
    

    (ungetestet, daher ohne gewähr)



  • herzlichen dank,
    werd ich ausprobieren


Anmelden zum Antworten