sprintf in std::string



  • Gibt es in C++ eine Möglichkeit für die Ausgabe wie mit sprintf / snprintf in einen std::string anstatt in ein char array?

    Also geht das hier auch ohne den Umweg über das char array?

    unsigned char digest[16];
    
    // digest is filled here
    
    char temp[3] = {0};
    std::string md5sum;
    
    for(int i=0; i<16; i++)
    {
      snprintf(temp, 3, "%02x", digest[i]);
      md5sum += temp;
    }
    

    Ich kenne nur noch std::to_string

    aber damit bekomme ich nicht die hex formatierung...



  • Man kann auch direkt in den string hineinformatieren. Man muss nur aufpassen, dass der die richtige Größe hat:

    unsigned char digest[16];
    
    // digest is filled here
    
    std::string md5sum;
    md5sum.resize(sizeof(digest) * 2);
    
    for(int i=0; i<16; i++)
    {
      snprintf(&md5sum[0] + (i * 2), 3, "%02x", digest[i]);
    }
    


  • Ah ok, danke.

    Ob das jetzt eine schönere Lösung ist muss ich mir noch überlegen.
    😉



  • engitiny schrieb:

    [...] sprintf [...]

    brrrr. -schauder-

    engitiny schrieb:

    Ich kenne nur noch std::to_string

    aber damit bekomme ich nicht die hex formatierung...

    #include <sstream>
    #include <iostream>
    #include <iomanip>
    
    int main()
    {
    	unsigned char digest[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 };
    
    	std::stringstream ss{};
    
    	for( unsigned i = 0; i < 16; ++i )
    		ss << std::setw( 2 ) << std::setfill( '0' ) << std::hex
    		   << static_cast< unsigned >( digest[ i ] );
    
    	std::cout << ss.str() << '\n';
    }
    


  • Danke Dir für die ausführliche Lösung Swordfish.

    Bin noch nicht so lange bei C++ ... vorher nur C.
    Wieder was gelernt. 🙂


Anmelden zum Antworten