したらばTOP ■掲示板に戻る■ 全部 1-100 最新50 | メール | |

管理人の独り言(プログラミング関連)

2756ACUVE★:2010/10/02(土) 13:42:43
bool base64encode(void const * const data, unsigned int const size, char **ret){
static char const * const list = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
unsigned int const fullsize = size / 3, rest = size % 3;
unsigned char *retp = new(std::nothrow) unsigned char[(fullsize + (rest == 0 ? 0 : 1)) * 4 + 1];
*ret = reinterpret_cast<char*>(retp);
unsigned char const *datap = static_cast<unsigned char const*>(data);
if(retp == NULL){
return false;
}

for(unsigned int i = 0; i < fullsize; ++i, datap += 3, retp += 4){
retp[0] = list[datap[0] >> 2];
retp[1] = list[(datap[0] & 0x3) << 4 | datap[1] >> 4];
retp[2] = list[(datap[1] & 0xF) << 2 | datap[2] >> 6];
retp[3] = list[datap[2] & 0x3F];
}

switch(rest){
case 1:{
retp[0] = list[datap[0] >> 2];
retp[1] = list[(datap[0] & 0x3) << 4];
retp[2] = retp[3] = '=';
retp += 3;
break;
}

case 2:{
retp[0] = list[datap[0] >> 2];
retp[1] = list[(datap[0] & 0x3) << 4 | datap[1] >> 4];
retp[2] = list[(datap[1] & 0xF) << 2];
retp[3] = '=';
retp += 3;
break;
}
}

retp[0] = '\0';

return true;
}


新着レスの表示


名前: E-mail(省略可)

※書き込む際の注意事項はこちら

※画像アップローダーはこちら

(画像を表示できるのは「画像リンクのサムネイル表示」がオンの掲示板に限ります)

掲示板管理者へ連絡 無料レンタル掲示板