1. 程式人生 > >c語言urlEncode實現

c語言urlEncode實現

#include "stdafx.h"
#include "assert.h"
#include <string>
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()
{
	string oriString = "我是一個 兵
[email protected]
#$*%/.a^%$#*&$#@[email protected]+=2"; string resultString = UrlEncode(oriString); string decodeString = UrlDecode(resultString); return 0; }

相關推薦

c語言urlEncode實現

#include "stdafx.h" #include "assert.h" #include <string> using namespace std; unsigned char ToHex(unsigned char x) { return x &

c語言實現全局變量

比較 實現 自定義類型 外部 main [] 定義變量 結構體 而在 在用C語言編寫程序的時候,我們常常想定義一個可以在不同.c文件中被使用的變量,以此來實現數據的傳遞。但是這個變量定義的不對的話,就會在編譯時出現編譯錯誤,或者可以編譯通過,但是沒有實現變量在不

c語言簡單實現word count功能

判斷 ref 使用 href .cn nbu ext p s span c語言簡單實現word count功能 一:源碼參考 參考地址:https://home.cnblogs.com/u/sunbuqiao/ 二:閱讀

線性表的順序存儲結構C語言實現

構造 數據位 -- 刪除 ++ mat print 合並 erro 描述順序存 結構需要3 個屬性:? 存儲空間的起始位置:數組 ? 線性表的最大存儲容量的數組長度 ? 線性表的當前長度 LOC(ai)= LOC(ai) + (i-l)*c #include "std

C語言模擬實現strstr函數,strrstr 函數

c語言 模擬實現 strstr strstr和strrstr已經算是字符串中相對比較難的了,但是只要我們善於分析,解剖字符串,就會化難為易。其實學習代碼的過程中需要我們靜下心來分析,理解。 srtstr函數的功能及用法 原型:char *strstr(const char *dst, const

C語言如何實現C++中對象屬性和方法

討論 button c語言 對象 ron oid 技術分享 數據 而在   在C++中,我們常見到用類定義一個對象,這個對象可以有他自己的屬性(數據)和方法(函數),而在C語言的正常語法中,是禁止在結構體中定義函數的。   在一個關於觸摸屏的驅動程序中發現,用C語言的也可以

資料結構---棧(C語言陣列實現

https://blog.csdn.net/morixinguan/article/details/51374184 資料結構---棧(C語言陣列實現)   棧的全名稱為堆疊,棧其實就是與佇列相反的過程,佇列是先進先出,而棧便是先進後出了,如下圖:  

資料結構---佇列(C語言陣列實現

https://blog.csdn.net/morixinguan/article/details/51374296 資料結構---佇列(C語言陣列實現)   佇列是先進先出的過程。簡單地畫一幅畫來描述一下佇列: 一個簡單的、由陣列實現的佇列,可以由以下幾種最基本的操

C語言+EasyX實現——滑鼠座標實時顯示

滑鼠座標的實時顯示在很多地方用到,比如在畫圖工具中就有(左下角): 要實現這種實時座標顯示其實並不難,可以用C語言+EasyX實現: #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<graphics

詳解!C語言程式設計實現小遊戲“三子棋”

今天我們來程式設計實現一個充滿童趣的小遊戲“三子棋” 先來說一下三子棋的規則: 三子棋又叫九宮棋、圈圈叉叉、一條龍等。 將正方形對角線連起來,或相對兩邊依次擺上三個雙方棋子, 總之只要將自己的三個棋子走成一條線, 對方就算輸了。 不用再過多解釋了,相信大家一定都玩過! 那麼,該

資料結構之 伸展樹個人筆記 伸展樹(一)之 圖文解析 和 C語言實現

閱讀了skywang的伸展樹的講解,覺得講的很不錯,再次也推薦大家無論是新手還是老手都可以去閱讀下。 ----------------------------------------------------------------------------------------- 伸展樹(一)之 圖文

C語言指標實現兩個數的互換

#include <stdio.h> void change1(int a, int b)//形參與實參不是同一個變數{ int t; t = a; a = b; b = t; } void change2(int * a, int * b)//只是把兩個變數的地址儲存的位置換了,但是變數的值

C語言 指標實現字串連線

C語言 指標實現字串連線 #include <stdio.h> #include <string.h> int main() { char s1[100], s2[100], s3[100]; char *p1=NULL; char *p2=NULL; char

c語言模擬實現memcpy

在c語言的庫函式中,有一個函式實現了陣列中元素的選擇性拷貝———memcpy; 除了利用庫函式之外,還可以通過自己的模擬實現元素的拷貝,先通過傳到呼叫函式的值來選擇要拷貝多少個元素;然後將所得到的陣列利用迴圈列印在螢幕上,完成拷貝。 #include<stdio.h> int *

c語言模擬實現strncat

       在c語言的庫函式中,strcat負責將一個字串加在另一個字串的後面,但他只能將一個字串的所有字元加在另一字串的後面,而strncat則可以選擇性的在字串後加字串,使追加字串更靈活,更安全。        在

c語言模擬實現strcat

      在庫函式中,strcat負責將兩個字串相連在一起,而在不使用庫函式的情況下,自己模擬實現一個my_strcat也可以實現這樣的效果。        先定義兩個字串,如果將字串arr2連線在arr1後,則必須保證arr1

C語言指標實現計算平均分等功能

4個學生5門課資料自己輸入,輸出第一門的平均分,並找出有兩門以上課程不及格的學生和平均成績在90分以上的或全部課程成績在85分以上的學生。程式不難,容易理解,但關鍵是思路要清楚。裡面涉及大量的指標的定義使用,多敲點這樣過百行的程式為以後大程式打基礎。程式碼如下: #include<iost

C語言簡單實現檔案分塊

C語言簡單實現檔案分塊 模組1:分割檔案 指定目標輸入檔案(檔名或檔案路徑)和分割尺寸,要求分割尺寸(單位:MB)為正整數,且範圍在[MIN_SIZE, MAX_SIZE]。 分割後產生塊檔案,命名格式為“part_”+編號。 模組2:合併檔案 指定目標輸出檔案(檔名或檔案路徑)。 順序

GSM A5/1演算法C語言程式碼實現和分析

介紹 全球超過200個國家和地區超過10億人正在使用GSM電話。對中國使用者來說,GSM就是移動和聯通的2g模式。 在1982年A5首次提出時,人們認為A5 / 1金鑰長度要128位,但最終確定的結果是64位金鑰(政府可以使用暴力破解算出)。很可能是政府的壓力迫使金鑰位數縮

課上補做:用C語言程式設計實現ls命令

課上補做:用C語言程式設計實現ls命令 一、有關ls ls :用來列印當前目錄或者制定目錄的清單,顯示出檔案的一些資訊等。 ls -l:列出長資料串,包括檔案的屬性和許可權等資料 ls -R:連同子目錄一同顯示出來,也就所說該目錄下所有檔案都會顯示出來 ls -a:可以將目錄下的全部檔案