C++: Convert occurrences of hexadecimal ascii values in a string to normal chars
===

I have a std::string which contains letters and numbers as normal, but all punctuation (e.g. brackets, square brackets, commas and colons) are in their ascii representation (e.g. %28, %29, %2C and %3A).  

What would be the fastest way to parse my string, leave 'normal' characters alone and convert hexadecimal ascii values to their ascii representations?

Thanks,

Rik