static inline std::string binary_to_printable()

in common/stringutility.h [169:225]


static inline std::string binary_to_printable(const void *buffer, size_t length)
{
    std::string printable;
    printable.reserve(length * 4);

    auto buf = static_cast<const std::uint8_t *>(buffer);

    for (size_t i = 0; i < length; i++)
    {
        std::uint8_t c = buf[i];
        if (std::isprint(c))
        {
            if (c == '\\')
            {
                printable.push_back('\\');
                printable.push_back('\\');
            }
            else
            {
                printable.push_back(c);
            }
        }
        else if (std::isspace(c))
        {
            printable.push_back('\\');
            if (c == '\n')
            {
                printable.push_back('n');
            }
            else if (c == '\r')
            {
                printable.push_back('r');
            }
            else if (c == '\t')
            {
                printable.push_back('t');
            }
            else if (c == '\v')
            {
                printable.push_back('v');
            }
            else if (c == '\f')
            {
                printable.push_back('f');
            }
        }
        else
        {
            printable.push_back('\\');
            printable.push_back('x');
            printable.push_back("0123456789ABCDEF"[c >> 4]);
            printable.push_back("0123456789ABCDEF"[c & 0xf]);
        }
    }

    return printable;
}