想自己在symbian上实现SMTP和POP的朋友,第一步就是要实现
Base64编码与解码,下面给出简单的实现代码:
//*
* ======================================================
* Name : CBase64Coder.h
* Author : FangYuan Gui
* Depend on lib : imut.lib
* =======================================================
*/
#ifndef __CBASE64CODER_H__
#define __CBASE64CODER_H__
#include <e32base.h>
#include <imcvcodc.h>//TImCodecB64
//Base64 Encode and decode
class CBase64Coder : public CBase
{
public:
static CBase64Coder* NewLC();
static CBase64Coder* NewL();
~CBase64Coder();
TPtr8 EncodeL( const TDesC8& aSrcStr );
TPtr8 DecodeL( const TDesC8& aSrcStr );
void ReleaseBuf();
private:
CBase64Coder();
TImCodecB64 iB64Coder;
HBufC8* iBuf;
};
#endif /* __CBASE64CODER_H__ */
/*
* ======================================================
* Name : CBase64Coder.cpp
* Author : FangYuan Gui
* Created on : 2009-6-16
* =======================================================
*/
#include "CBase64Coder.h"
CBase64Coder::CBase64Coder()
{
iB64Coder.Initialise();
}
CBase64Coder* CBase64Coder::NewLC()
{
CBase64Coder* self = new( ELeave )CBase64Coder();
CleanupStack::PushL( self );
return self;
}
CBase64Coder* CBase64Coder::NewL()
{
CBase64Coder* self = CBase64Coder::NewLC();
CleanupStack::Pop( self );
return self;
}
CBase64Coder::~CBase64Coder()
{
if( NULL != iBuf )
{
delete iBuf;
iBuf = NULL;
}
}
TPtr8 CBase64Coder::EncodeL( const TDesC8& aSrcStr )
{
if( NULL != iBuf )
{
delete iBuf;
iBuf = NULL;
}
iBuf = HBufC8::NewL( aSrcStr.Length() + aSrcStr.Length()/3 );
TPtr8 bufPtr = iBuf->Des();
iB64Coder.Encode( aSrcStr, bufPtr );
return iBuf->Des();
}
TPtr8 CBase64Coder::DecodeL( const TDesC8& aSrcStr )
{
if( NULL != iBuf )
{
delete iBuf;
iBuf = NULL;
}
iBuf = HBufC8::NewL( aSrcStr.Length() );
TPtr8 bufPtr = iBuf->Des();
iB64Coder.Decode( aSrcStr, bufPtr );
return iBuf->Des();
}
void CBase64Coder::ReleaseBuf()
{
if( NULL != iBuf )
{
delete iBuf;
iBuf = NULL;
}
}