用C++写的一个urlcode的例子

urlencode的规则其实很简单,搜索了半天,才找到原理,看了看其他人写的例子,csdn上有一个哥们用vc写了一个例子,感觉不过瘾,用c++重写了一个,个人感觉已经足够简单了,希望对初学者有用。

URLEncode是这样编码的 
1。数字和字母不变。
2。空格变为"+"号。
3。其他被编码成"%"加上他们的ascii的十六进制,规律是这样的 
比如“啊”字 Ascii的十六进制是B0A1——>%B0%A1(Note:它是每个字节前加个%)。

 

/*
URLEncode是这样编码的 
1。数字和字母不变。
2。空格变为"+"号。
3。其他被编码成"%"加上他们的ascii的十六进制,规律是这样的 
比如“啊”字 Ascii的十六进制是B0A1——>%B0%A1(Note:它是每个字节前加个%)。
*/


#include 
< iostream >
#include 
< string >
#include 
< fstream >
#include 
< ctype.h >
#include 
< stdlib.h >

using   namespace  std;

typedef unsigned 
char  BYTE;

inline BYTE toHex(
const  BYTE  & x)
{
    
return x > 9 ? x + 55: x + 48;
}


string  urlEncoding(  string   & sIn )
{
    cout 
<< "size: " << sIn.size() << endl;
    
string sOut;
    
forint ix = 0; ix < sIn.size(); ix++ )
    
{
        BYTE buf[
4];
        memset( buf, 
04 );
        
if( isalnum( (BYTE)sIn[ix] ) )
        
{
            buf[
0= sIn[ix];
        }

        
else if ( isspace( (BYTE)sIn[ix] ) )
        
{
            buf[
0= '+';
        }

        
else
        
{
            buf[
0= '%';
            buf[
1= toHex( (BYTE)sIn[ix] >> 4 );
            buf[
2= toHex( (BYTE)sIn[ix] % 16);
        }

        sOut 
+= (char *)buf;
    }

    
return sOut;
}


int  main( int  argc,  char   * argv[])
{
    
string src;
    
    ifstream inFile( 
"in.txt" );
    
if!inFile )
    
{
        cout 
<< "not in.txt to read" << endl;
        system(
"PAUSE");
        
return -1;
    }

    inFile 
>> src;
    
    
string sOut = urlEncoding( src );
    cout 
<< sOut << endl;
  
  system(
"PAUSE");    
  
return 0;
}

 

你可能感兴趣的:(C,And,C++,c++,string,byte,iostream,system)