Symbian Base64 编码、解码

来源:互联网 发布:淘宝商家入驻条件费用 编辑:程序博客网 时间:2024/06/05 17:22

 

Symbian中提供了, 相关的类对其进行操作。 我是用统提供的API进行操作:

 

/*
 ============================================================================
 Name         : Base64Handler.h
 Author         : Nobile.Amir
 Version     : 1.0
 Copyright   : Your copyright notice
 Description : CBase64Handler declaration
 ============================================================================
 */

#ifndef __BASE64HANDLER_H__
#define __BASE64HANDLER_H__

#include <e32std.h>
#include <e32base.h>
#include <imcvcodc.h>

class CBase64Handler : public CBase
    {
public:
    ~CBase64Handler();
    static CBase64Handler* NewL();
    static CBase64Handler* NewLC();
   
    HBufC8* Base64EncodeLC(const TDesC8 & aSourceBuf);
    HBufC8* Base64DecodeLC(const TDesC8 & aSourceBuf);
    HBufC8* Base64EncodeLC(const TDesC16 & aSourceBuf);

private:
    CBase64Handler();
    void ConstructL();
   
    HBufC8 * buffer;
    HBufC8 * buffer8;
    HBufC8 * buffer16;

    };

#endif // __BASE64HANDLER_H__

 

 

 

/*
 ============================================================================
 Name         : Base64Handler.cpp
 Author         : Nobile.Amir
 Version     : 1.0
 Copyright   : Your copyright notice
 Description : CBase64Handler implementation
 ============================================================================
 */

#include "Base64Handler.h"

CBase64Handler::CBase64Handler()
    {
    }

CBase64Handler::~CBase64Handler()
    {
    if( buffer != NULL )
        {
        delete buffer;
        buffer = NULL;
        }
    if( buffer8 != NULL )
        {
        delete buffer8;
        buffer8 = NULL;
        }
    if( buffer16 != NULL )
        {
        delete buffer16;
        buffer16 = NULL;
        }
    }

CBase64Handler* CBase64Handler::NewLC()
    {
    CBase64Handler* self = new (ELeave) CBase64Handler();
    CleanupStack::PushL(self);
    self->ConstructL();
    return self;
    }

CBase64Handler* CBase64Handler::NewL()
    {
    CBase64Handler* self = CBase64Handler::NewLC();
    CleanupStack::Pop();
    return self;
    }

void CBase64Handler::ConstructL()
    {

    }


HBufC8* CBase64Handler::Base64EncodeLC( const TDesC8 & aSourceBuf )
    {
    TImCodecB64 B64;
    buffer8 = HBufC8::NewL( aSourceBuf.Length() + aSourceBuf.Length()/3 );
    B64.Initialise();
    TPtr8 buffPtr = buffer8->Des();
    B64.Encode( aSourceBuf, buffPtr );
    return  buffer8;
    }

HBufC8* CBase64Handler::Base64DecodeLC( const TDesC8 & aSourceBuf )
    {
    TImCodecB64 B64;
    buffer = HBufC8::NewLC( aSourceBuf.Length() );
    B64.Initialise();
    TPtr8 buffPtr = buffer->Des();
    B64.Decode( aSourceBuf, buffPtr );
    return  buffer;
    }

HBufC8* CBase64Handler::Base64EncodeLC( const TDesC16 & aSourceBuf )
    {
    buffer16 = HBufC8::NewLC( aSourceBuf.Length() );
    buffer16->Des().Copy( aSourceBuf );
    return Base64EncodeLC( *buffer16 );
    }

 

 

/********************************************************************/

 

CBase64Handler* Handler = CBase64Handler::NewL();
    HBufC8* encodeBuf = Handler->Base64EncodeLC(_L("this is test!"));
   
    HBufC *enbuff16 = HBufC::NewLC( (*encodeBuf).Length() );
    enbuff16->Des().Copy( *encodeBuf );
    console->Write( enbuff16->Des() );
    console->Write( _L("/r/n") );
   
    HBufC8* decodeBuf = Handler->Base64DecodeLC( ( *encodeBuf ) );
    HBufC *debuff16 = HBufC::NewLC( (*decodeBuf).Length() );
    debuff16->Des().Copy( *decodeBuf );
    console->Write( debuff16->Des() );
    console->Write( _L("/r/n") );
   
    CleanupStack::PopAndDestroy(4);