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);