C/C++の宿題を片付けます 87代目 at TECH
[2ch|▼Menu]
717:デフォルトの名無しさん
07/05/22 16:59:19
>>707
#include<stdio.h>
int encode(char *dest, int dest_size, const char *src, int src_size){
    char *base64="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
    int dest_index, src_index, left_size, i;
    long temp;
    if(dest==NULL || src==NULL || src_size<=0 || dest_size<(src_size+2)/3*4) return -1;
    for(src_index=dest_index=0;src_index+2<src_size;src_index+=3){
        temp=(src[src_index]<<16)|(src[src_index+1]<<8)|src[src_index+2];
        for(i=0;i<8*3;i+=6) dest[dest_index++]=base64[(temp>>(18-i))&0x3F];
    }
    left_size=src_size-src_index;
    for(i=0,temp=0;i<left_size;i++) temp=(temp<<8)|src[src_index+i];
    for(;i<3;i++) temp=(temp<<8);
    for(i=0;i<left_size*8;i+=6) dest[dest_index++]=base64[(temp>>(18-i))&0x3F];
    for(;dest_index%4!=0;) dest[dest_index++]='=';
    return dest_index;
}
int main(void){
    FILE *fp;
    char src_buf[3*100], dest_buf[(sizeof(src_buf)+2)/3*4];
    int read_size, coded_size;
    if((fp=fopen("sample.txt", "rb"))==NULL) return 1;
    for(;;){
        read_size=fread(src_buf, 1, sizeof(src_buf), fp);
        coded_size=encode(dest_buf, sizeof(dest_buf), src_buf, read_size);
        if(read_size<=0 || coded_size<=0) break;
        fwrite(dest_buf, 1, coded_size, stdout);
    }
    fclose(fp);
    return 0;
}


次ページ
続きを表示
1を表示
最新レス表示
スレッドの検索
類似スレ一覧
話題のニュース
おまかせリスト
▼オプションを表示
暇つぶし2ch

4177日前に更新/299 KB
担当:undef