RGB-Dez nach RGB-Web umwandeln: Wie ersetze ich sprintf mit std::String?



  • David_pb schrieb:

    Schonwieder sprintf. Was soll an sprintf so schön sein?

    Aach, der Nohlgenormte wollte doch nur ein bissl trollen.



  • David_pb schrieb:

    Schonwieder sprintf. Was soll an sprintf so schön sein?

    Es schiesst nicht mit Kanonen ( Boost ) auf Spatzen. 😃
    Und die Funktion dadrüber kommt sogar gänzlich ohne Bibliotheksfunktionen aus.

    MfG Der Wohlgeformte



  • sprintf() ist schön - solange du dich mit C beschäftigst. In C++ Programmen hat es eher wenig zu suchen, das verwendet man stringstreams.



  • meine schoenste und "schnellste" loesung
    (der verstaendniss wegen hab ich das anfangs-shifting nicht im rest vermischt)

    int64_t a=((farbe_dez&0xff)<<16)|(farbe_dez&0xff00)|((farbe_dez&0xff0000)>>16);
    a=(farbe_dez&0xf)|
      ((farbe_dez&0xf0)<<4)|
      ((farbe_dez&0xf00)<<8)|
      ((farbe_dez&0xf000)<<12)|
      ((farbe_dez&0xf0000)<<16)|
      ((farbe_dez&0xf00000)<<20)|
      ((farbe_dez&0xf000000)<<24)|
      ((farbe_dez&0xf0000000)<<28);
    a+=0x3030303030303030;
    const char* pStr=&a;
    


  • rapso schrieb:

    meine schoenste und "schnellste" loesung
    (der verstaendniss wegen hab ich das anfangs-shifting nicht im rest vermischt)

    int64_t a=((farbe_dez&0xff)<<16)|(farbe_dez&0xff00)|((farbe_dez&0xff0000)>>16);
    a=(farbe_dez&0xf)|
      ((farbe_dez&0xf0)<<4)|
      ((farbe_dez&0xf00)<<8)|
      ((farbe_dez&0xf000)<<12)|
      ((farbe_dez&0xf0000)<<16)|
      ((farbe_dez&0xf00000)<<20)|
      ((farbe_dez&0xf000000)<<24)|
      ((farbe_dez&0xf0000000)<<28);
    a+=0x3030303030303030;
    const char* pStr=&a;
    

    Krass 🙂



  • Der Wohlgeformte schrieb:

    David_pb schrieb:

    Schonwieder sprintf. Was soll an sprintf so schön sein?

    Es schiesst nicht mit Kanonen ( Boost ) auf Spatzen. 😃
    Und die Funktion dadrüber kommt sogar gänzlich ohne Bibliotheksfunktionen aus.

    MfG Der Wohlgeformte

    Ich denke boost ist in diesem fall nicht mehr eine Kanone, sondern eine ICBM mit mehreren Nuklearsprengköpfen um eine Ameise (diese billige Umwandlung da) zu bombadieren. 😃

    Dazu ist sprintf schneller, übersichtlicher und man muss den PräProzessor mit einem Inklude weniger belasten und zu guter Letzt: Man muss keinen fremden Code benutzen!



  • C++ Kritiker schrieb:

    Ich denke boost ist in diesem fall nicht mehr eine Kanone, sondern eine ICBM mit mehreren Nuklearsprengköpfen um eine Ameise (diese billige Umwandlung da) zu bombadieren. 😃

    LOL 😃 🙂 👍



  • C++ Kritiker schrieb:

    und zu guter Letzt: Man muss keinen fremden Code benutzen!

    Ja, wäre ja auch eine Katastrophe!

    Mal im Ernst: Das (und der Rest) sind in einer "echten" Software einfach keine Argumente, höchstens für kleine Skriptkiddy-Demos.



  • Konrad Rudolph schrieb:

    Mal im Ernst: Das (und der Rest) sind in einer "echten" Software einfach keine Argumente, höchstens für kleine Skriptkiddy-Demos.

    ...sprach das flamekiddy.



  • Konrad Rudolph schrieb:

    C++ Kritiker schrieb:

    und zu guter Letzt: Man muss keinen fremden Code benutzen!

    Ja, wäre ja auch eine Katastrophe!

    Mal im Ernst: Das (und der Rest) sind in einer "echten" Software einfach keine Argumente, höchstens für kleine Skriptkiddy-Demos.

    Edit 1: quote - Tags korrigiert.
    Edit 2: Ich halte es schon für ernstzunehmende Argumente, da zu viele Köche bekanntlich den Brei verderben. 🙂



  • rapso schrieb:

    Konrad Rudolph schrieb:

    Mal im Ernst: Das (und der Rest) sind in einer "echten" Software einfach keine Argumente, höchstens für kleine Skriptkiddy-Demos.

    ...sprach das flamekiddy.

    Wenn Du meinst …



  • Hallo,

    Boost kannst du meines Wissens komplett vergessen.



  • Konrad Rudolph schrieb:

    rapso schrieb:

    Konrad Rudolph schrieb:

    Mal im Ernst: Das (und der Rest) sind in einer "echten" Software einfach keine Argumente, höchstens für kleine Skriptkiddy-Demos.

    ...sprach das flamekiddy.

    Wenn Du meinst …

    ...dass du flamest.



  • rapso schrieb:

    meine schoenste und "schnellste" loesung

    int64_t a=((farbe_dez&0xff)<<16)|(farbe_dez&0xff00)|((farbe_dez&0xff0000)>>16);
    a=(farbe_dez&0xf)|
      ((farbe_dez&0xf0)<<4)|
      ((farbe_dez&0xf00)<<8)|
      ((farbe_dez&0xf000)<<12)|
      ((farbe_dez&0xf0000)<<16)|
      ((farbe_dez&0xf00000)<<20)|
      ((farbe_dez&0xf000000)<<24)|
      ((farbe_dez&0xf0000000)<<28);
    a+=0x3030303030303030;
    const char* pStr=&a;
    
    char *hex = "0123456789abcdef";
    char str[] = 
    {
      '#',
      hex[15 & farbe_dez>>20],
      hex[15 & farbe_dez>>16],
      hex[15 & farbe_dez>>12],
      hex[15 & farbe_dez>>8],
      hex[15 & farbe_dez>>4],
      hex[15 & farbe_dez],
      0
    };
    

    😉



  • Ah, die Shifting Freaks sind wieder unterwegs. 🙂



  • Also mal ganz ehrlich: Wer für so eine Umwandung, und zwar nur für diese eine Umwandlung...

    - fremnden Code benutzt,
    - eine fremde Library,
    - seinen Code regelrecht aufbläht (Mit Funktionen die absolut gar nicht benötigt werden)
    - und hier einen Glaubenskrieg draus macht von wegen: sprintf hat in C++ nichts zu suchen, scher dich weg du Satan!

    ... der hat schon echt einen am Rappel.

    Einfach sprintf und gut ist, oder die lösung von raspo bzw. pale dog ist auch noch sehr vertretbar. Aber sonst? Absolut lächerlich.

    Extra für eine so furz Konvertierung mit stringstreams/boost/usw. anzutanzen (die man wohlmöglich sowieso sonst nirgendwo im Programm benutzt) oder alá Konrad direkt einen Glaubenskrieg mit Flamewar anzuzetteln, also ich weiß nicht...

    Irgendwo ist mir da der Sinn ganz fremd bei diesen hier dargebotenen Perspektiven, da es hier irgendwie schon regelrecht religiöse Aspekte mit sich zieht - und ich als Entwickler/Wissenschaftler oder nennen wir es "Aufs Ziel gerichtete Coder" mich mit sowas schon gar nicht identifizieren kann. Das passt halt nicht.

    Einfach sprintf und gut ist - alles andere sind Nuklearraketen auf Ameisen.



  • pale dog schrieb:

    rapso schrieb:

    meine schoenste und "schnellste" loesung

    int64_t a=((farbe_dez&0xff)<<16)|(farbe_dez&0xff00)|((farbe_dez&0xff0000)>>16);
    a=(farbe_dez&0xf)|
      ((farbe_dez&0xf0)<<4)|
      ((farbe_dez&0xf00)<<8)|
      ((farbe_dez&0xf000)<<12)|
      ((farbe_dez&0xf0000)<<16)|
      ((farbe_dez&0xf00000)<<20)|
      ((farbe_dez&0xf000000)<<24)|
      ((farbe_dez&0xf0000000)<<28);
    a+=0x3030303030303030;
    const char* pStr=&a;
    
    char *hex = "0123456789abcdef";
    char str[] = 
    {
      '#',
      hex[15 & farbe_dez>>20],
      hex[15 & farbe_dez>>16],
      hex[15 & farbe_dez>>12],
      hex[15 & farbe_dez>>8],
      hex[15 & farbe_dez>>4],
      hex[15 & farbe_dez],
      0
    };
    

    😉

    vermutlich nicht so schnell, aber trotzdem nett. da seh ich gerade dass ich 2 stellen zuviel habe, hmpf

    int64_t a=((farbe_dez&0xff)<<16)|(farbe_dez&0xff00)|((farbe_dez&0xff0000)>>16);
    a=((farbe_dez&0xf)<<4)|
      ((farbe_dez&0xf0)<<8)|
      ((farbe_dez&0xf00)<<12)|
      ((farbe_dez&0xf000)<<16)|
      ((farbe_dez&0xf0000)<<20)|
      ((farbe_dez&0xf00000)<<24);
    a+=0x2330303030303000;
    const char* pStr=&a;
    


  • rapso schrieb:

    vermutlich nicht so schnell...

    da wär' ich mir nicht so sicher 😉
    btw: funzt dein code überhaupt? wie bekommst du in deinem code den sprung von '9' zu 'a' hin? ich kann nix dergleichen entdecken...



  • Runde 1: pale dog vs. rapso
    Fight!

    Zeigt die Assemblercodes! 😃



  • dürfte ich nochmal in den raum werfen, dass #ff8080 KEINE webfarbe ist? :p

    webfarben dürfen ausschliesslich die werte 00, 33, 66, 99, AA, CC und FF für die drei grundfarben besitzen ^^


Anmelden zum Antworten