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; }
时间: 2024-10-17 05:07:35