C/C++の宿題を片付けます 87代目
at TECH
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