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
stringhineinformatieren. 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.