欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C++ 寫的UrlEncode和UrlDecode實(shí)例

 更新時(shí)間:2020年12月10日 10:31:17   作者:claireyuancy  
這篇文章主要介紹了C++ 寫的UrlEncode和UrlDecode實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧

關(guān)于UrlEncode的實(shí)現(xiàn)(C++)。網(wǎng)上有非常多不同的版本號(hào)。對(duì)須要編碼的字符集的選取并不統(tǒng)一。那么究竟有沒有標(biāo)準(zhǔn)呢?答案是有的。

絕對(duì)不編碼的,僅僅有字母、數(shù)字、短橫線(-)、下劃線(_)、點(diǎn)(.)和波浪號(hào)(~),其它字符要視情況而定。所以一般性的urlencode僅僅需保留上述字符不進(jìn)行編碼。

以下給出實(shí)現(xiàn):

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; 
} 

補(bǔ)充知識(shí):C++中URL解碼/編碼

我就廢話不多說了,大家還是直接看代碼吧~

#include <iostream> 
#include <string>
using namespace std;
 
char dec2hexChar(short int n) {
	if (0 <= n && n <= 9) {
		return char(short('0') + n);
	}
	else if (10 <= n && n <= 15) {
		return char(short('A') + n - 10);
	}
	else {
		return char(0);
	}
}
 
short int hexChar2dec(char c) {
	if ('0' <= c && c <= '9') {
		return short(c - '0');
	}
	else if ('a' <= c && c <= 'f') {
		return (short(c - 'a') + 10);
	}
	else if ('A' <= c && c <= 'F') {
		return (short(c - 'A') + 10);
	}
	else {
		return -1;
	}
}
 
string escapeURL(const string& URL)
{
	string result = "";
	for (unsigned int i = 0; i < URL.length(); i++) {
		char c = URL[i];
		if (
			('0' <= c && c <= '9') ||
			('a' <= c && c <= 'z') ||
			('A' <= c && c <= 'Z') ||
			c == '/' || c == '.'
			) {
			result += c;
		}
		else {
			int j = (short int)c;
			if (j < 0) {
				j += 256;
			}
			int i1, i0;
			i1 = j / 16;
			i0 = j - i1 * 16;
			result += '%';
			result += dec2hexChar(i1);
			result += dec2hexChar(i0);
		}
	}
	return result;
}
 
string deescapeURL(const string& URL) {
	string result = "";
	for (unsigned int i = 0; i < URL.length(); i++) {
		char c = URL[i];
		if (c != '%') {
			result += c;
		}
		else {
			char c1 = URL[++i];
			char c0 = URL[++i];
			int num = 0;
			num += hexChar2dec(c1) * 16 + hexChar2dec(c0);
			result += char(num);
		}
	}
	return result;
}

以上這篇C++ 寫的UrlEncode和UrlDecode實(shí)例就是小編分享給大家的全部內(nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • C語言實(shí)現(xiàn)停車管理系統(tǒng)

    C語言實(shí)現(xiàn)停車管理系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了C語言實(shí)現(xiàn)停車管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • C語言實(shí)現(xiàn)去除字符串中空格的簡單實(shí)例

    C語言實(shí)現(xiàn)去除字符串中空格的簡單實(shí)例

    下面小編就為大家?guī)硪黄狢語言實(shí)現(xiàn)去除字符串中空格的簡單實(shí)例。小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2016-05-05
  • 深入理解鏈表的各類操作詳解

    深入理解鏈表的各類操作詳解

    本篇文章是對(duì)鏈表的各類操作進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05
  • C++?STL反向迭代器的實(shí)現(xiàn)

    C++?STL反向迭代器的實(shí)現(xiàn)

    本文主要介紹了C++?STL反向迭代器的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-07-07
  • C語言數(shù)據(jù)的存儲(chǔ)超詳細(xì)講解上篇

    C語言數(shù)據(jù)的存儲(chǔ)超詳細(xì)講解上篇

    使用編程語言進(jìn)行編程時(shí),需要用到各種變量來存儲(chǔ)各種信息。變量保留的是它所存儲(chǔ)的值的內(nèi)存位置。這意味著,當(dāng)您創(chuàng)建一個(gè)變量時(shí),就會(huì)在內(nèi)存中保留一些空間。您可能需要存儲(chǔ)各種數(shù)據(jù)類型的信息,操作系統(tǒng)會(huì)根據(jù)變量的數(shù)據(jù)類型,來分配內(nèi)存和決定在保留內(nèi)存中存儲(chǔ)什么
    2022-04-04
  • C語言楊氏矩陣查找算法實(shí)例講解

    C語言楊氏矩陣查找算法實(shí)例講解

    楊氏矩陣是一個(gè)數(shù)字矩陣,矩陣的每一行從左到右一次遞增,矩陣從上到下遞增,在這樣的矩陣中查找一個(gè)數(shù)字是否存在。時(shí)間復(fù)雜度小于O(N),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步早日升職加薪
    2022-09-09
  • c++ 梅森數(shù)源碼示例解析

    c++ 梅森數(shù)源碼示例解析

    這篇文章主要為大家介紹了c++ 梅森數(shù)源碼示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-12-12
  • C語言do關(guān)鍵字的具體使用

    C語言do關(guān)鍵字的具體使用

    本篇文章主要介紹了C語言do關(guān)鍵字的具體使用,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-12-12
  • 一文搞懂C++中string容器的構(gòu)造及使用

    一文搞懂C++中string容器的構(gòu)造及使用

    本文小編將帶大家學(xué)習(xí)最常見的一個(gè)引用類型——string容器,學(xué)習(xí)string容器的構(gòu)造、以及C++API中String類的常用方法,感興趣的可以了解一下
    2022-07-07
  • MFC中exe圖標(biāo)修改的方法

    MFC中exe圖標(biāo)修改的方法

    修改窗口標(biāo)題圖標(biāo)可通過導(dǎo)入圖標(biāo),然后在CMainFrame.:OnCreate函數(shù)中加載圖標(biāo)即可, 代碼如下:
    2013-04-04

最新評(píng)論