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 }

 

posted @ 2018-02-20 14:04  喵小喵~  阅读(323)  评论(0编辑  收藏  举报