帮我理解这个URL解码器:

时间:2011-05-22 10:19:09

标签: c++ url pointers urldecode pointer-arithmetic

在自己玩弄URL解码之后,我设法提出了一些有用的想法 - 但它们效率不高。由于URL解码是我的程序中可能发生严重瓶颈的地方,我决定在互联网上寻找更有效的解决方案。我遇到了这篇codeguru文章:

http://www.codeguru.com/cpp/cpp/string/conversions/article.php/c12759

现在,我并不反对使用其他人的代码,特别是如果它比我的更好。但是,我喜欢在我做之前知道它是如何工作的。使用您不完全理解的代码毫无意义。

这就是我被困住的地方,我理解解码函数中正在进行的大部分指针工作。丢失的地方是HEX2DEC数组和相关的转换算法。它没有在网站上提供,而是在示例下载中提供,因此为了您的方便,我将在此处发布以及解码功能:

http://pastebin.com/AVDnr6cK

这个函数究竟是如何使用这个数组将十六进制转换为十进制,然后将十进制转换成它的ASCII等价?

再次感谢您的帮助。

1 个答案:

答案 0 :(得分:2)

数组是一个查找表,对于用作索引的每个ascii字符,如果字符不是十六进制字符,则它将提供-1([0..9][A..F]或{{1} })或转换为该十六进制字符的整数。

在主循环中,每当找到[a..f]时,首先使用该数组来确定以下两个字符是否为十六进制(%),如果是,则转换整个序列。操作!= -1等同于(dec1 << 4) + dec2,表示转换为两个十六进制字符的8位整数。