VC实现URL编解码

    bool  DecodeUrl(char *Src, char  *url, int  MaxLen)  
    {  
        if(NULL == url || NULL == Src)  
        {  
            return false;  
        }  
        if(MaxLen == 0)  
        {  
            return false;  
        }  
      
        char  *p = Src;  // 用来循环  
        int    i = 0;    // i用来控制url数组  
      
        /* 临时保存url编码的数据 
           例如: %1A%2B%3C 
        */  
        char  t = '\0';  
        while(*p != '\0' && MaxLen--)  
        {  
            if(*p == 0x25) // 0x25 = '%'  
            {  
                /* 以下是十六进制数中常出现的大写字母,小写字母,数字的判断 */  
                if(p[1] >= 'A' && p[1] <= 'Z') // 大写字母  
                {  
                    t = p[1] - 'A' + 10;  // A = 10,下同  
                }  
                else if(p[1] >= 'a' && p[1] <= 'z') // 小写字母  
                {  
                    t = p[1] - 'a' + 10;  
                }  
                else if(p[1] >= '0' && p[1] <= '9') // 数字  
                {  
                    t = p[1] - '0';  
                }  
                t *= 16;  // 将数放到十位上去  
      
                if(p[2] >= 'A' && p[2] <= 'Z') // 大写字母  
                {  
                    t += p[2] - 'A' + 10;  
                }  
                else if(p[2] >= 'a' && p[2] <= 'z') // 小写字母  
                {  
                    t += p[2] - 'a' + 10;  
                }  
                else if(p[2] >= '0' && p[2] <= '9') // 数字  
                {  
                    t += p[2] - '0';  
                }  
      
                // 到此合成了一个十六进制数  
                url[i] = t;  
      
                p += 3, i++;  
            }  
            else  
            {  
                // 没有被url编码的数据  
                // '+'特殊处理.它相当于一个空格  
                if(*p != '+')  
                {  
                    url[i] = *p;  
                }  
                else  
                {  
                    url[i] = 0x20;  
                }  
                i++;  
                p++;  
            }  
        }  
        url[i] = '\0';  // 结束符  
        return true;  
    }  

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。