ちゃらっと書いてみたBase64エンコードのソース(C言語)
とりあえずまともに書いたらこんな感じかな??
プログラム引数に文字列を指定すると、Base64文字列を出力してくれる。
ソース
#include <stdio.h> #include <string.h> int main(int argc, char **argv) { char *w = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; unsigned char *p = argv[1], *buff; int i = 0, x = 0, l = 0; buff = (char *)malloc((strlen(p) * 4 / 3 + 3) & ~0x03 + 1); for (; *p; p++) { x = x << 8 | *p; for (l += 8; l >= 6; l -= 6) { buff[i++] = w[(x >> (l - 6)) & 0x3f]; } } if (l > 0) { x <<= 6 - l; buff[i++] = w[x & 0x3f]; } for (; i % 4;) { buff[i++] = '='; } puts(buff); free(buff); return 0; }
実行例
$ ./a "#include <stdio.h>" I2luY2x1ZGUgPHN0ZGlvLmg+
おまけ
あまり頑張っていないショートコーディング。。
痛過ぎる;;
しかもunsignedじゃないのでマルチバイトもじ無視www
x,l;main(int i,char**p){ char*w="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; for(++p;**p;)for(x=x<<8|*(*p)++,l+=8;l>=6;putchar(w[x>>(l-=6)&63])); if(l)for(x<<=l=6-l,putchar(w[x&63]);l;l-=2)printf("="); }
スペース省いて222バイト。。