原创文章,欢迎转载,转载请注明出处:http://blog.csdn.net/jmppok/article/details/17137839
主要是针对文章中 Base64.cpp中的_getBase64Char(char c)和_getCharOfBase64(char c)两个函数进行了改进.
原来代码为:
char _getBase64Char(char c)
{
if(c>=0 && c<26)
{
return 'A'+c;
}
else if(c>=26 && c<52)
{
return 'a'+c-26;
}
else if(c>=52 && c<62)
{
return '0'+c-52;
}
else if(c==62)
{
return '+';
}
else if(c==63)
{
return '/';
}
}
char _getCharOfBase64(char c)
{
if(c>='A' && c<='Z')
{
return c-'A';
}
else if(c>='a' && c<='z')
{
return c-'a'+26;
}
else if(c>='0' && c<='9')
{
return c-'0'+52;
}
else if(c=='+')
{
return 62;
}
else if(c=='/')
{
return 63;
}
}
改进后的代码
const char * base64_charset="ABCDEFGHIJKLMNOPQRSTUVWXYZ"
"abcdefghijklmnopqrstuvwxyz"
"0123456789"
"+/";
char _getBase64Char(char c)
{
return base64_charset[c];
}
char _getCharOfBase64(char c)
{
switch(c)
{
case 'A':
case 'B':
case 'C':
case 'D':
case 'E':
case 'F':
case 'G':
case 'H':
case 'I':
case 'J':
case 'K':
case 'L':
case 'M':
case 'N':
case 'O':
case 'P':
case 'Q':
case 'R':
case 'S':
case 'T':
case 'U':
case 'V':
case 'W':
case 'X':
case 'Y':
case 'Z':
return c-'A';
case 'a':
case 'b':
case 'c':
case 'd':
case 'e':
case 'f':
case 'g':
case 'h':
case 'i':
case 'j':
case 'k':
case 'l':
case 'm':
case 'n':
case 'o':
case 'p':
case 'q':
case 'r':
case 's':
case 't':
case 'u':
case 'v':
case 'w':
case 'x':
case 'y':
case 'z':
return c-'a'+26;
case '0':
case '1':
case '2':
case '3':
case '4':
case '5':
case '6':
case '7':
case '8':
case '9':
return c-'0'+52;
case '+':
return 62;
case '/':
return 63;
}
}
其他代码不变。
经过测试,改进后的Base64编码效率可提高8倍左右。
200K encode 1000次 327ms
500K encode 1000次 671ms
1M encode 1000次 1388ms