七行プログラミング

このエントリーをはてなブックマークに追加
488|  - -)
即興で作ったBase64エンコーダ。stdinから入れてstdoutに吐き出す。

#include <stdio.h>
char *m="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";void
c(char*d,unsigned char*s,int l){int v[3]={0,2,3};long t=0;int i;for(i=l;i<3;i++
)s[i]=0;for(i=0;i<3;i++)t=(t<<8)|(s[i]);for(i=0;i<4;i++)d[i]=m[(t>>((3-i)*6))&
0x3F];if(l<3)memset(d+v[l],'=',4-v[l]);}int main(void){char r[54],*p;char o[4];
int l;while((l=fread(r,1,54,stdin))>0){p=r;while(l){int e=l>3?3:l;c(o,p,e);p+=e
,l-=e;fwrite(o,1,4,stdout);}putchar('\n');}return 0;}