delphi 6里有控件。
或者你去下 Kingron的资料库,里面也有。
不行的话我可以把源码贴出来。

解决方案 »

  1.   

    好吧!!!
    解码:
    Function Chr2Base(  c:char ):Byte;
    begin
        if ( c >= 'A')and( c <= 'Z' ) then
            result:= Byte ( ord(c) - ord('A') )
        else if (c >= 'a') and (c <= 'z' ) then
            result:= Byte ( ord(c) - ord('a') + 26 )
        else if ( c >= '0' )and( c <= '9' ) then
            result:= Byte ( ord(c) - ord('0') + 52 )
        else if ( c = '+' ) then
            result:=62
        else
            result:=63;
    end;function Base64Decode( s:String ):String;
    var
      n,i:integer;
      c,t:byte;
      asTemp:string;
    begin
        n :=Length(s );
        for i:= 1 to n do
        begin
            if ( s[i] = '=' ) then
                break;
            c := Chr2Base( s[i] );
            if ( i mod 4 = 1 ) then
                t := c shl 2
            else if ( i mod 4 = 2 ) then
            begin
                asTemp :=asTemp+char( t or ( c shr 4 ) );
                t :=  Byte ( c shl 4 );
            end
            else if ( i mod 4 = 3 ) then
            begin
                asTemp :=asTemp+char( t or ( c shr 2 ) );
                t := Byte ( c shl 6 );
            end
            else
                asTemp :=asTemp+char( t or c );
        end;
        result:=asTemp;
    end;编码:时间来不及了,我先把C语言的贴出来,还没有验证过,你自己试试,上面的解码函数是正确的,因为我有个读邮件程序就是用它。你可以翻成Delphi下的,然后解码的程序来验证。char Hex2Chr( Byte n )
    {
        n &= 0xF;
        if ( n < 10 )
            return ( char )( n + '0' );
        else
            return ( char )( n - 10 + 'A' );
    }
    //---------------------------------------------------------------------------
    //  char 0-F to 4bit binary
    Byte Chr2Hex( char c )
    {
        c = toupper( c );
        if ( c >= '0' && c <= '9' )
            return ( int )( c - '0' );
        else if ( c >= 'A' && c <= 'F' )
            return ( int )( c - 'A' + 10 );
        else
            return -1;
    }
    //---------------------------------------------------------------------------
    //  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;
    }