VC++中实现URLEncode和URLDecode
1.Server.URLEncode在VC中的实现

  1. CString CMyFun::URLEncode(CString sIn)
  2. {
  3.         //判断是否存在字符串
  4.         if (sIn.IsEmpty() || sIn == _T(“”))
  5.                 return sIn;
  6.         CString sOut;
  7.         const int nLen = sIn.GetLength() + 1;
  8.         register LPBYTE pOutTmp = NULL;
  9.         LPBYTE pOutBuf = NULL;
  10.         register LPBYTE pInTmp = NULL;
  11.         LPBYTE pInBuf = (LPBYTE)sIn.GetBuffer(nLen);
  12.         BYTE b = 0;
  13.         //alloc out buffer
  14.         pOutBuf = (LPBYTE)sOut.GetBuffer(nLen * 3 – 2);//new BYTE [nLen  * 3];
  15.         if (pOutBuf)
  16.         {
  17.                 pInTmp = pInBuf;
  18.                 pOutTmp = pOutBuf;
  19.                 // do encoding
  20.                 while (*pInTmp)
  21.                 {
  22.                         if (isalnum(*pInTmp))
  23.                                 *pOutTmp++ = *pInTmp;
  24.                         else
  25.                                 if (isspace(*pInTmp))
  26.                                         *pOutTmp++ = ‘+’;
  27.                                 else
  28.                                 {
  29.                                         *pOutTmp++ = ‘%’;
  30.                                         *pOutTmp++ = toHex(*pInTmp >> 4);
  31.                                         *pOutTmp++ = toHex(*pInTmp % 16);
  32.                                 }
  33.                         pInTmp++;
  34.                 }
  35.                 *pOutTmp = ‘\0’;
  36.                 //sOut=pOutBuf;
  37.                 //delete [] pOutBuf;
  38.                 sOut.ReleaseBuffer();
  39.         }
  40.         sIn.ReleaseBuffer();
  41.         return sOut;
  42. }

复制代码

2.Server.URLDecode在VC中的实现

  1. CString CMyFun::URLDecode(CString sIn)
  2. {
  3.         CString sOut;
  4.         const int nLen = sIn.GetLength() + 1;
  5.         register LPBYTE pOutTmp = NULL;
  6.         LPBYTE pOutBuf = NULL;
  7.         register LPBYTE pInTmp = NULL;
  8.         LPBYTE pInBuf = (LPBYTE)sIn.GetBuffer(nLen);
  9.         //alloc out buffer
  10.         pOutBuf = (LPBYTE)sOut.GetBuffer(nLen);
  11.         if (pOutBuf)
  12.         {
  13.                 pInTmp = pInBuf;
  14.                 pOutTmp = pOutBuf;
  15.                 // do encoding
  16.                 while (*pInTmp)
  17.                 {
  18.                         if (‘%’ == *pInTmp)
  19.                         {
  20.                                 pInTmp++;
  21.                                 *pOutTmp++ = (toByte(*pInTmp) % 16 << 4) + toByte(*(pInTmp + 1)) % 16;//高4位+低4位
  22.                                 pInTmp++;
  23.                         }
  24.                         else if (‘+’ == *pInTmp)
  25.                                 *pOutTmp++ = ‘ ‘;
  26.                         else
  27.                                 *pOutTmp++ = *pInTmp;
  28.                         pInTmp++;
  29.                 }
  30.                 *pOutTmp = ‘\0’;
  31.                 sOut.ReleaseBuffer();
  32.         }
  33.         sIn.ReleaseBuffer();
  34.         return sOut;
  35. }

复制代码

  1. //
  2. inline BYTE CMyFun::toByte(const BYTE &x)
  3. {
  4.         return x>57 ? x – 55 : x – 48;
  5. }
  6. //
  7. inline BYTE CMyFun::toHex(const BYTE &x)
  8. {
  9.         return x > 9 ? x + 55 : x + 48;
  10. }

复制代码

 

下载说明:
1.本站资源都是白菜价出售,同样的东西,我们不卖几百,也不卖几十,甚至才卖几块钱,一个永久会员能下载全站100%源码了,所以单独购买也好,会员也好均不提供相关技术服务。
2.如果源码下载地址失效请联系站长QQ进行补发。
3.本站所有资源仅用于学习及研究使用,请必须在24小时内删除所下载资源,切勿用于商业用途,否则由此引发的法律纠纷及连带责任本站和发布者概不承担。资源除标明原创外均来自网络整理,版权归原作者或本站特约原创作者所有,如侵犯到您权益请联系本站删除!
4.本站站内提供的所有可下载资源(软件等等)本站保证未做任何负面改动(不包含修复bug和完善功能等正面优化或二次开发);但本网站不能保证资源的准确性、安全性和完整性,由于源码具有复制性,一经售出,概不退换。用户下载后自行斟酌,我们以交流学习为目的,并不是所有的源码都100%无错或无bug;同时本站用户必须明白,【安安资源网】对提供下载的软件等不拥有任何权利(本站原创和特约原创作者除外),其版权归该资源的合法拥有者所有。
5.请您认真阅读上述内容,购买即以为着您同意上述内容,由于源码具有复制性,一经售出,概不退换。
安安资源网 » VC++中实现URLEncode和URLDecode