当前位置: 代码迷 >> 汇编语言 >> 千分求最快的Base64编码函数解决方案
  详细解决方案

千分求最快的Base64编码函数解决方案

热度:6094   发布时间:2013-02-26 00:00:00.0
千分求最快的Base64编码函数
千分求最快的Base64编码函数

我有上万的可用分,可以开新贴给分

Base64编码是很常用的一种把二进制数据转换为字符串的算法;
  (它把3个8bit数据分成4组6bit数据,然后拿6bit数映射到64个可显示字符集合中的一个)

我开贴征集最快的Base64编码函数,要求如下:
    1.使用200MB随机数据来测试编码函数         (数据量最少的话也要20MB上)
    2.测试单位时间(秒)编码出的字符数据量     (假设200MB数据用了2秒钟编码时间,那速度就是:200MB/3*4/2s=133.3MB/s)
    3.必须说明测试使用的CPU型号(运行频率)、最好说明内存型号(运行频率)   、语言和编译器类型
    4.可以测试已有的Base64编码函数(比如各种库中的、开源的等等),注明来源(可以不提供源代码),也可以是自己写的(最好能给出源代码)
    5.可以补充测试一下Base64解码函数的速度
    (如果是自己写的   看函数速度   给分时酌情加分)


==========================================================================
//testBase64.cpp
//一个简单的base64_encode编码函数例子,和测试框架
#include   <time.h>
#include   <iostream>
#include   <vector>
#include   <string>

    //   3x8bit   to   4x6bit
    //   |----------------------|----------------------|----------------------|
    //   |                 a[0..7]               |               b[0..7]                 |               c[0..7]                 |
    //   |----------------------|----------------------|----------------------|
    //
    //   |----------------------|----------------------|----------------------|----------------------|
    //   |                 a[2..7]               |   b[4..7]   +   a[0..1] < <4   |   c[6..7]   +   b[0..3] < <2   |               c[0..5]                 |
    //   |----------------------|----------------------|----------------------|----------------------|

const   unsigned   char   BASE64_PADDING= '= ';     //输入数据不足3的倍数时   输出字符后面填充 '= '号


        inline   unsigned   char   to_base64char(const   unsigned   char   code6bit)
        {
                if   (code6bit <26)                   //[   0..25]   =>   [ 'A '.. 'Z ']
                        return   code6bit+ 'A ';
                else   if   (code6bit <52)         //[26..51]   =>   [ 'a '.. 'z ']
                        return   code6bit+( 'a '-26);
                else   if   (code6bit <62)         //[52..61]   =>   [ '0 '.. '9 ']
                        return   code6bit+( '0 '-52);
                else   if   (code6bit==62)       //62   =>   '+ '
                        return   '+ ';
  相关解决方案