| Welcome to SapporoWorks! We create stimulating network programs.
By a demand from user, SapporoWorks evolves. | ||||||||||||
| |||||||||||||
| 開発情報 > BaASE64 エンコード・デコード | |||||||||||||
|
●●●●概要 BASE64 は、バイナリデータなどを7ビットASCIIだけの文字列に変換するもので、電子メールの添付など各種のインターネット・プロトコルで使用されています。 変換方法は、3バイト(24ビット)のデータを、0(A)から64(/)までの6ビットの4文字に置き換えます。 ●●●●ソース
//変換テーブル
const char B64[] ="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
#define Val(i) ( buf[i] == '=' ? 0 : strchr(B64, buf[i]) - B64 )
//デコード
char * FromBase64(unsigned char *buf)
{
char *ReturnBuf = new char[strlen(buf)+1];
int j=0;
int l = strlen(buf);
//4バイトずつ処理
for (int i=0;i&l;l;i+=4){
ReturnBuf[j] =(char)( (Val(i) << 2) | ((Val(i+1) & 0x30) >> 4));
ReturnBuf[j+1] =(char)( ((Val(i+1) & 0x0f) << 4) | ((Val(i+2) & 0x3c) >> 2));
ReturnBuf[j+2] =(char)( ((Val(i+2) & 0x03) << 6) | (Val(i+3) & 0x3f));
j += 3;
}
ReturnBuf[j] = NULL;
return (ReturnBuf);
}
//エンコード
char * ToBase64(unsigned char *buf)
{
char *ReturnBuf = new char[strlen(buf)*2];
//一時的に保存するバッファ
unsigned char *Buf = new char[strlen(buf)*2];
memset(Buf,strlen(buf)*2,0);
strcpy(Buf,buf);
int j=0;
int l = strlen(buf);
//3バイトずつ処理
for (int i=0;i&l;l;i+=3){
//2006.06.19 修正(池田様より情報提供頂きました。)
//ReturnBuf[j] =(char)(0==(Buf[i] >> 2))?'=':( B64[ Buf[i] >> 2 ]);
//ReturnBuf[j+1] =(char)(0==((Buf[i] & 0x03)<<4 | (Buf[i+1]>>4)))?'=':( B64[ (Buf[i] & 0x03)<<4 | (Buf[i+1]>>4) ]);
//ReturnBuf[j+2] =(char)(0==((Buf[i+1] & 0x0f)<<2 | (Buf[i+2] >>6)))?'=':( B64[ (Buf[i+1] & 0x0f)<<2 | (Buf[i+2] >>6)]);
//ReturnBuf[j+3] =(char)(0==(Buf[i+2] & 0x3f))?'=':( B64[ Buf[i+2] & 0x3f]);
ReturnBuf[j] =(char)(0==(Buf[i] >> 2))?'A':( B64[ Buf[i] >> 2 ]);
ReturnBuf[j+1] =(char)(0==((Buf[i] & 0x03)<<4 | (Buf[i+1]>>4)))?'A':( B64[ (Buf[i] & 0x03)<<4 | (Buf[i+1]>>4) ]);
ReturnBuf[j+2] =(char)(0==((Buf[i+1] & 0x0f)<<2 | (Buf[i+2] >>6)))?'A':( B64[ (Buf[i+1] & 0x0f)<<2 | (Buf[i+2] >>6)]);
ReturnBuf[j+3] =(char)(0==(Buf[i+2] & 0x3f))?'A':( B64[ Buf[i+2] & 0x3f]);
j += 4;
}
ReturnBuf[j] = NULL;
delete [] Buf;
return (ReturnBuf);
}
●●●●サンプル サンプルプログラム実行画面
ソースファイルのダウンロード 007-src.LZH 4Kbyte
実行ファイルのダウンロード 007-bin.LZH 198Kbyte
|
| 開発情報 > BaASE64 エンコード・デコード | |
copyright(c) 1995- SapporoWorks
当サイトはリンクフリーです。リンク時に連絡などは必要有りません。また、どのページにリンクして頂いても構いません。 | |