76.CGI编码
- CGI编码
1 "%D6%DC%C8%F0%B8%A3";
- 转换到字符串中:
1 //CGI编码转到char类型的tmpstr中中 2 char* change(char *str) 3 { 4 //分配内存 5 char *tempstr = malloc(strlen(str) + 1); 6 //x是tempstr的下标,y是str的下标,依次赋值 7 int x=0, y=0; 8 //分别代表第一个编码,第二个编码 9 char assii_1, assii_2; 10 //如果传入的str不为空则一直循环 11 while (str[y]) 12 { 13 //赋值并进行判断 14 if ((tempstr[x]=str[y]) =='%') 15 { 16 //'%'后第一个进行编码 17 if (str[y+1]>='A') 18 { 19 assii_1 = str[y + 1] - 55; 20 } 21 else 22 { 23 assii_1 = str[y + 1] - 48; 24 } 25 26 //‘%’后第二个进行编码 27 if (str[y + 2] >= 'A') 28 { 29 assii_2= str[y + 2] - 55; 30 } 31 else 32 { 33 assii_2 = str[y + 2] - 48; 34 } 35 //把解析出来的赋给tempstr 36 tempstr[x] = assii_1 * 16 + assii_2; 37 38 //前进 39 y += 2; 40 41 } 42 //依次前进 43 x++; 44 y++; 45 } 46 //最后一位置零 47 tempstr[x] = '\0'; 48 49 //返回结果 50 return tempstr; 51 }
完整代码:
1 #include<stdio.h> 2 3 //CGI编码转到char类型的tmpstr中中 4 char* change(char *str) 5 { 6 //分配内存 7 char *tempstr = malloc(strlen(str) + 1); 8 //x是tempstr的下标,y是str的下标,依次赋值 9 int x=0, y=0; 10 //分别代表第一个编码,第二个编码 11 char assii_1, assii_2; 12 //如果传入的str不为空则一直循环 13 while (str[y]) 14 { 15 //赋值并进行判断 16 if ((tempstr[x]=str[y]) =='%') 17 { 18 //'%'后第一个进行编码 19 if (str[y+1]>='A') 20 { 21 assii_1 = str[y + 1] - 55; 22 } 23 else 24 { 25 assii_1 = str[y + 1] - 48; 26 } 27 28 //‘%’后第二个进行编码 29 if (str[y + 2] >= 'A') 30 { 31 assii_2= str[y + 2] - 55; 32 } 33 else 34 { 35 assii_2 = str[y + 2] - 48; 36 } 37 //把解析出来的赋给tempstr 38 tempstr[x] = assii_1 * 16 + assii_2; 39 40 //前进 41 y += 2; 42 43 } 44 //依次前进 45 x++; 46 y++; 47 } 48 //最后一位置零 49 tempstr[x] = '\0'; 50 51 //返回结果 52 return tempstr; 53 } 54 55 56 57 void main() 58 { 59 char str[128] = "%D6%DC%C8%F0%B8%A3"; 60 char *res = change(str); 61 printf("%d\n", strlen(res)); 62 printf("%s", res); 63 64 system("pause"); 65 }