⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mimeqpb64.cpp

📁 MIME(BASE64/QP) 编码/解码程序代码。 此代码是一个 BCB 的单元
💻 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 + -