00001 #include <sstream>
00002 #include <string>
00003
00004 bool url_decode(const std::string& in, std::string& out)
00005 {
00006 out.clear();
00007 out.reserve(in.size());
00008 for (std::size_t i = 0; i < in.size(); ++i)
00009 {
00010 if (in[i] == '%')
00011 {
00012 if (i + 3 <= in.size())
00013 {
00014 int value;
00015 std::istringstream is(in.substr(i + 1, 2));
00016 if (is >> std::hex >> value)
00017 {
00018 out += static_cast<char>(value);
00019 i += 2;
00020 }
00021 else
00022 {
00023 return false;
00024 }
00025 }
00026 else
00027 {
00028 return false;
00029 }
00030 }
00031 else
00032 {
00033 out += in[i];
00034 }
00035 }
00036 return true;
00037 }
00038
00039 int main()
00040 {
00041 std::string out;
00042 url_decode("%FE%FE%FE", out);
00043 return 0;
00044 }