这是c++ builder的源码
//---------------------------------------------------------------------------
//  Base64 code table
//  0-63 : A-Z(25) a-z(51), 0-9(61), +(62), /(63)
char __fastcall Base2Chr( Byte n )
{
    n &= 0x3F;
    if ( n < 26 )
        return ( char )( n + 'A' );
    else if ( n < 52 )
        return ( char )( n - 26 + 'a' );
    else if ( n < 62 )
        return ( char )( n - 52 + '0' );
    else if ( n == 62 )
        return '+';
    else
        return '/';
}
//---------------------------------------------------------------------------
Byte Chr2Base( char c )
{
    if ( c >= 'A' && c <= 'Z' )
        return ( Byte )( c - 'A' );
    else if ( c >= 'a' && c <= 'z' )
        return ( Byte )( c - 'a' + 26 );
    else if ( c >= '0' && c <= '9' )
        return ( Byte )( c - '0' + 52 );
    else if ( c == '+' )
        return 62;
    else
        return 63;
}
AnsiString Base64Encode( AnsiString s )
{
    int n = s.Length( );
    Byte c, t;
    AnsiString asTemp = "";    for ( int i = 1; i <= n; i++ )
    {
        c = s[i];
        if ( i % 3 == 1 )
        {
            asTemp += Base2Chr( c >> 2 );
            t = ( c << 4 ) & 0x3F;
        }
        else if ( i % 3 == 2 )
        {
            asTemp += Base2Chr( t | ( c >> 4 ) );
            t = ( c << 2 ) & 0x3F;
        }
        else
        {
            asTemp += Base2Chr( t | ( c >> 6 ) );
            asTemp += Base2Chr( c );
        }
    }
    if ( n % 3 != 0 )
    {
        asTemp += Base2Chr( t );
        if ( n % 3 == 1 )
            asTemp += "==";
        else
            asTemp += "=";
    }
    return asTemp;
}
//---------------------------------------------------------------------------
//
AnsiString Base64Decode( AnsiString s )
{
    int n = s.Length( );
    Byte c, t;
    AnsiString asTemp = "";    for ( int i = 1; i <= n; i++ )
    {
        if ( s[i] == '=' )
            break;
        c = Chr2Base( s[i] );
        if ( i % 4 == 1 )
            t = c << 2;
        else if ( i % 4 == 2 )
        {
            asTemp += ( char )( t | ( c >> 4 ) );
            t = ( Byte )( c << 4 );
        }
        else if ( i % 4 == 3 )
        {
            asTemp += ( char )( t | ( c >> 2 ) );
            t = ( Byte )( c << 6 );
        }
        else
            asTemp += ( char )( t | c );
    }
    return asTemp;
}

解决方案 »

  1.   

    http://www.vchelp.net/source/uu_mime_base64_decode.zip
      

  2.   

    四三变换,把二进制数据的8bit变成6bit,好象是0x20--0x60等,即可见字符,3个8bit 变成 4个6bit字节。
      

  3.   

    变换码表有多种,反正BASE64、UUENCODE等都有多种不同的码表
      

  4.   

    Base64﹑Quoted-Printable的MIME格式的編碼規范參考
    http://rfc.sunsite.dk/rfc/rfc2045.html
    http://rfc.sunsite.dk/rfc/rfc2046.html