c++ 版本url encode 和url decode 代码
2016-07-01 11:04
459 查看
#include <iostream> #include <assert.h> using namespace std; unsigned char ToHex(unsigned char x) { return x > 9 ? x + 55 : x + 48; } unsigned char FromHex(unsigned char x) { unsigned char y; if (x >= 'A' && x <= 'Z') y = x - 'A' + 10; else if (x >= 'a' && x <= 'z') y = x - 'a' + 10; else if (x >= '0' && x <= '9') y = x - '0'; else assert(0); return y; } std::string UrlEncode(const std::string& str) { std::string strTemp = ""; size_t length = str.length(); for (size_t i = 0; i < length; i++) { if (isalnum((unsigned char)str[i]) || (str[i] == '-') || (str[i] == '_') || (str[i] == '.') || (str[i] == '~')) strTemp += str[i]; else if (str[i] == ' ') strTemp += "+"; else { strTemp += '%'; strTemp += ToHex((unsigned char)str[i] >> 4); strTemp += ToHex((unsigned char)str[i] % 16); } } return strTemp; } std::string UrlDecode(const std::string& str) { std::string strTemp = ""; size_t length = str.length(); for (size_t i = 0; i < length; i++) { if (str[i] == '+') strTemp += ' '; else if (str[i] == '%') { assert(i + 2 < length); unsigned char high = FromHex((unsigned char)str[++i]); unsigned char low = FromHex((unsigned char)str[++i]); strTemp += high*16 + low; } else strTemp += str[i]; } return strTemp; } int main(int argc,char *argv[]) { string unencode_url(argv[1]); cout << "unencode_url: " << unencode_url << endl; string encode_url = UrlEncode(unencode_url); cout << "encode_url: " << encode_url << endl; string decode_url = UrlDecode(encode_url); cout << "decode_url: " << decode_url << endl; }
相关文章推荐
- c++ Socket编程步骤
- RVIZ(一):Markers:sending Basic Shapes (C++)
- 适合win10的c语言·编程软件和翻译。
- C++程序设计语言练习11.4 算术运算符重载的类成员函数写法
- 设计模式C++实现(8)——代理模式
- 设计模式C++实现(7)——外观模式、组合模式
- 字符串
- 设计模式C++实现(6)——建造者模式
- C++中 模板Template的使用
- 设计模式C++实现(5)——原型模式、模板方法模式
- 设计模式C++实现(4)——单例模式
- 【win32】SetDlgItemInt(函数详解)
- 设计模式C++实现(3)——适配器模式
- 设计模式C++实现(2)——策略模式
- Eclipse下C语言的Socket编程(Winsock,gcc)问题总结
- C++函数重载
- C++函数重载
- C++转换构造函数和类型转换函数
- 交换+输出最大值+输出二进制1的个数
- C++18、STL——map