📄 mimeqpb64.cpp
字号:
//---------------------------------------------------------------------------
// MIME(Quoted-Printable & Base64) Encode/Decode unit. (CPP)
// Copyright (c) 2000, 01 Mental Studio - http://msrc.126.com
// Author : Raptor - raptorz@163.com
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "MimeQPB64.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
//---------------------------------------------------------------------------
// 将数据流编码为 MIME 字符串
// aSrc 为源数据流, aType 为 MIME 编码类型
// 返回结果字符串
AnsiString MimeEncode( TMemoryStream * aSrc, TMimeType aType )
{
TMemoryStream * buf;
AnsiString s;
buf = new TMemoryStream( );
try
{
if ( aType == mtQP ) // QPEncode
{
buf->Size = aSrc->Size * 3 + 1;
QPEncode( ( char * )( buf->Memory ), ( unsigned char * )( aSrc->Memory ), aSrc->Size );
}
else if ( aType == mtBase64 ) // Base64Encode
{
buf->Size = aSrc->Size * 4 / 3 + 1;
Base64Encode( ( char * )( buf->Memory ), ( unsigned char * )( aSrc->Memory ), aSrc->Size );
}
else
throw "Invalid MIME type!";
s = AnsiString( ( char * )( buf->Memory ) );
}
__finally
{
delete buf;
}
return s;
}
//---------------------------------------------------------------------------
// 将字符串编码为 MIME 字符串
// aSrc 为源字符串, aType 为 MIME 编码类型
// 返回结果字符串
AnsiString MimeEncode( AnsiString aSrc, TMimeType aType )
{
TMemoryStream * buf;
AnsiString s;
buf = new TMemoryStream( );
try
{
if ( aType == mtQP ) // QPEncode
{
buf->Size = aSrc.Length( ) * 3 + 1;
QPEncode( ( char * )( buf->Memory ), ( unsigned char * )( aSrc.c_str( ) ), aSrc.Length( ) );
}
else if ( aType == mtBase64 ) // Base64Encode
{
buf->Size = aSrc.Length( ) * 4 / 3 + 1;
Base64Encode( ( char * )( buf->Memory ), ( unsigned char * )( aSrc.c_str( ) ), aSrc.Length( ) );
}
else
throw "Invalid MIME type!";
s = AnsiString( ( char * )( buf->Memory ) );
}
__finally
{
delete buf;
}
return s;
}
//---------------------------------------------------------------------------
// 从字符串中解码 MIME 数据
// aDest 为结果数据流, aSrc 为源字符串, aType 为 MIME 编码类型
void MimeDecode( TMemoryStream * aDest, AnsiString aSrc, TMimeType aType )
{
aDest->Size = aSrc.Length( ) + 1;
if ( aType == mtQP ) // QPDecode
aDest->Size = QPDecode( ( unsigned char * )( aDest->Memory ), aSrc.c_str( ) );
else if ( aType == mtBase64 ) // Base64Decode
aDest->Size = Base64Decode( ( unsigned char * )( aDest->Memory ), aSrc.c_str( ) );
else
throw "Invalid MIME type!";
return;
}
//---------------------------------------------------------------------------
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -