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 wird hex nur aufgerufen, wenn der string genau zwei Zeichen lang ist

    Stimmt. 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üsstest string val = "7F"; hex(val); schreiben.

    Da diese Funktion aber ihr Argument überhaupt nicht ändern soll, nutze const. Also int hex(const string &hex). Das const ist mehr als nur Deko.



  • @wob

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


Anmelden zum Antworten