Escaping a C++ string

What's the easiest way to convert a C++ std::string to another std::string, which has all the unprintable characters escaped?

For example, for the string of two characters [0x61,0x01], the result string might be "a\x01" or "a%01".


  • Take a look at the Boost's String Algorithm Library. You can use its is_print classifier (together with its operator! overload) to pick out nonprintable characters, and its find_format() functions can replace those with whatever formatting you wish.

    #include <iostream>
    #include <boost/format.hpp>
    #include <boost/algorithm/string.hpp>
    struct character_escaper
        template<typename FindResultT>
        std::string operator()(const FindResultT& Match) const
            std::string s;
            for (typename FindResultT::const_iterator i = Match.begin();
                 i != Match.end();
                 i++) {
                s += str(boost::format("\\x%02x") % static_cast<int>(*i));
            return s;
    int main (int argc, char **argv)
        std::string s("a\x01");
        boost::find_format_all(s, boost::token_finder(!boost::is_print()), character_escaper());
        std::cout << s << std::endl;
        return 0;