用C++实现HttpUtility.UrlEncode和HttpUtility.UrlDecode

首先,需要先了解HttpUtility.UrlEncode是怎样编码的:

1.数字和字母不变。

2.空格变为"+"号。
3.其他被编码成"%"加上他们的ascii的十六进制,规律是这样的
   比如汉字“啊”字 Ascii的十六进制是B0A1,则编码后为"%B0%A1"(每个字节前加个%)。
 
/*******************************************
 * URLCode.h
 ******************************************/
#pragma once
#include <string>
using namespace std;
 
class CURLCode
{
public:
 CURLCode(){};
 virtual ~CURLCode(){};
 static string Encode(const char* lpszData);
 static string Decode(string inTmp);
private:
 inline static unsigned char toHex(const unsigned char &x){ return x > 9 ? x + 55: x + 48; }
 inline static unsigned char fromHex(const unsigned char &x){ return x > 64 ? x - 55 : x - 48; }
};
 
/*******************************************
 * URLCode.cpp
 ******************************************/
 #include "URLCode.h"
string CURLCode::Encode(const char* lpszData)
{
 string strResult = "";
 unsigned char* pInTmp = (unsigned char*)lpszData;
 // do encoding
 while (*pInTmp)
 {
  if(isalnum(*pInTmp))
   strResult += *pInTmp;
  else
   if(isspace(*pInTmp))
    strResult += '+';
   else
   {
    strResult += '%';
    strResult += toHex(*pInTmp>>4);
    strResult += toHex(*pInTmp%16);
   }
  pInTmp++;
 }
 
 return strResult;
}
string CURLCode::Decode(string inTmp)
{
 string strResult = "";
 int inlen = inTmp.length();
 for(int i=0;i<inlen;i++)
 {
  if(inTmp.at(i)=='%')
  {
   i++;
   char c = fromHex(inTmp.at(i++));
   c = c << 4;
   c += fromHex(inTmp.at(i));
   strResult += c;
  }
  else if(inTmp.at(i)=='+')
   strResult += ' ';
  else
   strResult += inTmp.at(i);
 }
 return strResult;
}
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值