Binmode STDOUT
-
@DocShoe sagte in Binmode STDOUT:
@_ro_ro
Ich denke, du hast @Th69 und @Finnegan da nicht richtig verstanden. Im Optimalfall sollte man Software wiederverwendbar machen, damit man das Rad nicht x-mal neu erfinden muss. In deinem Fall wirdhex
nur aufgerufen, wenn der string genau zwei Zeichen lang istStimmt. Von daher habe ich das auch geändert damit es evntl. woanders wiederverwendet werden kann:
int hex(string &hex){ int i; try{ i = stoi(hex, nullptr, 16); } catch(std::invalid_argument const& ex){ throw string("stoi invalid argument"); } catch(std::out_of_range const& ex){ throw string("stoi ot of range"); } return i; };
Und der Cast genau da wo er gebraucht wird:
// in Funktion percent_decode tokens << static_cast<unsigned char>( my::hex(hex) );
Danke nochmal und Viele Grüße!
-
@DocShoe sagte in Binmode STDOUT:
Wenn du nicht explizit jeden Exceptiontyp fangen einzeln willst kannst du einfach std::exception fangen, weil alle STL Exceptiontypen davon erben. Mit std::exception::what() kommst du dann an die Fehlermeldung.
Gute Idee!!! Danke und Gruß-
-
@_ro_ro sagte in Binmode STDOUT:
int hex(string &hex){
Durch so eine Funktionssignatur, also string&, zeigst du an, dass du den String per NICHT-konstanter Referenz übergibst - das bedeutet semantisch, dass du den String innerhalb deiner Funktion ändern willst. Du MUSST nun auch ein lvalue übergeben. Das heißt, das insbesondere sowas wie
hex("7F")
nicht funktioniert, weil das"7F"
keine Variable ist. Du müssteststring val = "7F"; hex(val);
schreiben.Da diese Funktion aber ihr Argument überhaupt nicht ändern soll, nutze
const
. Alsoint hex(const string &hex)
. Dasconst
ist mehr als nur Deko.
-
Danke, das hatte ich schlicht und einfach vergessen. Ist aber auch die fehlende Routine, kommt schon noch. Muss eh noch 'zig mal drüberschrubben
Viele Grüße--