注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

Code@Pig Home

喜欢背着一袋Code傻笑的Pig .. 忧美.欢笑.记忆.忘却 .之. 角落

 
 
 

日志

 
 

[lpc] base64 en/decode  

2008-07-25 22:50:56|  分类: lang_lpc |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
:-) 自己弄了个 base64 的 lpc version, just for fun~~~
---------------------------
// 0 ~ 64
static string _V2C = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
string base64_encode(string str)
{
        int count, len;
        int a, b, c, d, e;
        string cResult = "", cPostfix = "";

        count = 0;
        len = sizeof(str);

        if ( (len % 3) == 2 )
        {
                a = (str[len-2] >> 2);
                b = ((str[len-2] & 0x03) << 4) | (str[len-1] >> 4);
                c = ((str[len-1] & 0x0f) << 2);

                cPostfix = sprintf("%c%c%c=", _V2C[a], _V2C[b], _V2C[c]);
                len -= 2;
        }
        else if ( (len % 3) == 1 )
        {
                a = (str[len-1] >> 2);
                b = ((str[len-1] & 0x03) << 4);

                cPostfix = sprintf("%c%c==", _V2C[a], _V2C[b]);
                len -= 1;
        }

        while (count < len)
        {
                a = (str[count] >> 2);
                b = ((str[count] & 0x03) << 4) | (str[count+1] >> 4);
                c = ((str[count+1] & 0x0f) << 2) | (str[count+2] >> 6);
                d = (str[count+2] & 0x3f);

                cResult += sprintf("%c%c%c%c", _V2C[a], _V2C[b], _V2C[c], _V2C[d]);
                count += 3;
        }

        return (cResult + cPostfix);
}

static mapping _C2V = ([ ]);
string base64_decode(string str)
{
        int count, len;
        int c1, c2, c3;
        string cResult = "", cPostfix = "";

        count = 0;
        len = sizeof(str);

        if ( str[len-2..<-1] == "==" )
        {
                c1 = (_C2V[str[len-4]] << 2) | ((_C2V[str[len-3]] & 0x30) >> 4);

                cPostfix = sprintf("%c", c1);
                len -= 4;
        }
        else if ( str[len-1] == '=' )
        {
                c1 = (_C2V[str[len-4]] << 2) | ((_C2V[str[len-3]] & 0x30) >> 4);
                c2 = ((_C2V[str[len-3]] & 0x0f) << 4) | ((_C2V[str[len-2]] & 0x3c) >> 2);

                cPostfix = sprintf("%c%c", c1, c2);
                len -= 4;
        }

        while (count < len)
        {
                c1 = (_C2V[str[count]] << 2) | ((_C2V[str[count+1]] & 0x30) >> 4);
                c2 = ((_C2V[str[count+1]] & 0x0f) << 4) | ((_C2V[str[count+2]] & 0x3c) >> 2);
                c3 = ((_C2V[str[count+2]] & 0x03) << 6) | (_C2V[str[count+3]] & 0x3f);

                cResult += sprintf("%c%c%c", c1, c2, c3);
                count += 4;
        }

        return (cResult + cPostfix);
}


void create()
{
        int i;

        for ( i = 0; i < sizeof(_V2C); i++ )
        {
                _C2V[ _V2C[i] ] = i;
        }
}
  评论这张
 
阅读(824)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017