Sonderzeichen in String durch %-Hexwert ersetzen
-
Hallo allerseits!
Ich schreibe gerade ein Programm in C++, das u.a. Daten per POST-Methode an einen Server schickt. Dazu gehört auch ein String, der möglicherweise auch Sonderzeichen enthalten kann. Diese möchte ich vor dem Übermitteln in '%' gefolgt von ihrem Hexwert konvertieren, damit der Server das richtig interpretieren kann.
Nun könnte ich natürlich in dem String nach jedem einzelnen Zeichen suchen und es ersetzen. Ich finde diese Lösung allerdings nicht sonderlich schön und würde sie nur im Notfall in Betracht ziehen wollen.
Von daher meine Frage: Kennt jemand vllt. eine elegantere Methode?Besten Dank schonmal
Manny
-
So vielleicht. Was direkteres kenne ich leider nicht.
std::string toHex(const std::string& str) { std::stringstream strstr(""); strstr << std::hex << std::setfill('0'); for(std::string::const_iterator iter = str.begin(); iter != str.end(); ++iter) { strstr << std::setw(2) << static_cast<int>(*iter); } return strstr.str(); }
-
Hi Tachyon,
ich danke Dir für die schnelle Antwort. Die Funktion sieht schon sehr nett aus, ich habe nur ein Problem, und zwar komme ich nicht mit dem erweiterten Zeichensatz zurecht. Bis 0x7f ist alle prima, alle Zeichen darüber (z.B. Umlaute) bekommen aber noch nen ffffff gefolgt von dem richtigen Hexwert verpasst. Ich habe die Funktion so aufgerufen, wie Du sie gepostet hast und gebe den Rückgabewert per cout auf die Konsole aus.Gruß Manny
-
static_cast<unsigned long>(*iter)oder
static_cast<int>(static_cast<unsigned char>(*iter))müsste das Problem beheben.
-
Jap, die zweite Möglichkeit hat bei mir funktioniert. Vielen Dank!
-
Hallo, ich habe das gleiche problem, nur keine ahnung wie ich den code einbaun soll

Kann mir bitte jemand helfen?
kommt das alles in die main?
-
Das ist doch bereits eine fertige Funktion. Wenn dir das nichts sagt, dann solltest du den "Links für Neulinge" hier im Forum mal folgen.