std::stringをBASE64でエンコードします。
#include <stdio.h> #include <tchar.h> #include <iostream> #include <string> /* BASE64エンコード */ std::string Base64Encode ( std::string strData ) { const static char* baBase64tbl = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; std::string::iterator ite = strData.begin(); std::string::iterator iteEnd = strData.end(); /* 変換用バッファ */ union { unsigned char baBuf[ 4 ]; unsigned long dwValue; } uniValue; std::string strRet; /* 全データ巡回 */ while( ite != iteEnd ) { // バッファ初期化 uniValue.dwValue = 0; // 読みだしたバイト数 int nByteCount = 1; // 1バイト目の取得 uniValue.baBuf[ 2 ] = (unsigned char)*ite++; // 2バイト目の取得 if ( ite != iteEnd ) { uniValue.baBuf[ 1 ] = (unsigned char)*ite++; nByteCount++; } // 3バイト目の取得 if ( ite != iteEnd ) { uniValue.baBuf[ 0 ] = (unsigned char)*ite++; nByteCount++; } switch( nByteCount ) { case 3: strRet += baBase64tbl[ 0x3f & ( uniValue.dwValue >> 18 ) ]; strRet += baBase64tbl[ 0x3f & ( uniValue.dwValue >> 12 ) ]; strRet += baBase64tbl[ 0x3f & ( uniValue.dwValue >> 6 ) ]; strRet += baBase64tbl[ 0x3f & ( uniValue.dwValue >> 0 ) ]; break; case 2: strRet += baBase64tbl[ 0x3f & ( uniValue.dwValue >> 18 ) ]; strRet += baBase64tbl[ 0x3f & ( uniValue.dwValue >> 12 ) ]; strRet += baBase64tbl[ 0x3f & ( uniValue.dwValue >> 6 ) ]; strRet += "="; ite = iteEnd; break; case 1: strRet += baBase64tbl[ 0x3f & ( uniValue.dwValue >> 18 ) ]; strRet += baBase64tbl[ 0x3f & ( uniValue.dwValue >> 12 ) ]; strRet += "=="; ite = iteEnd; break; } } // BASE64エンコード結果を返す return( strRet ); } /* BASE64エンコード */ int _tmain ( int argc , _TCHAR* argv[] ) { /* std::wcoutのロケールを設定 これを設定するだけで、std::wcoutで日本語が表示される ようになります。 */ std::wcout.imbue( std::locale( "", std::locale::ctype ) ); // 変換対象の文字列 std::string strText = "BASE64でエンコードします。"; // BASE64エンコードを行います。 std::string strResult = Base64Encode( strText ); // 変換結果を表示 std::cout << strResult.c_str() << std::endl; // 正常終了 return( 0 ); }
QkFTRTY0gsWDR4OTg1KBW4NogrWC3IK3gUI=