#include <stdio.h>
#include <assert.h>
char* encode
= "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
char* enc(int* reg)
{
static char buf[4];
int i0 = (reg[0] & 0xfc) >> 2;
int i1 = ((reg[0] & 0x3) << 4) | ((reg[1] & 0xf0) >> 4);
int i2 = ((reg[1] & 0xf) << 2) | ((reg[2] & 0xc0) >> 6);
int i3 = ((reg[2] & 0x3f));
assert(i0 >= 0 && i0 < 64);
assert(i1 >= 0 && i1 < 64);
assert(i2 >= 0 && i2 < 64);
assert(i3 >= 0 && i3 < 64);
buf[0] = encode[i0];
buf[1] = encode[i1];
buf[2] = encode[i2];
buf[3] = encode[i3];
return buf;
}
int main()
{
int i = 0;
int reg[3];
char* p;
int width = 0;
while((reg[i] = getchar()) != EOF)
{
/* putchar(reg[i]); */
++i;
i = i % 3;
if(i == 0)
{
p = enc(reg);
for(i = 0 ; i < 4; ++i)
{
putchar(p[i]);
}
width += 4;
if(width >= 72)
{
putchar('\n');
width = 0;
}
i = 0;
}
}
if(i == 1)
{
reg[1] = 0;
reg[2] = 0;
p = enc(reg);
putchar(p[0]);
putchar(p[1]);
putchar('=');
putchar('=');
width += 4;
}
if(i == 2)
{
reg[2] = 0;
p = enc(reg);
putchar(p[0]);
putchar(p[1]);
putchar(p[2]);
putchar('=');
width += 4;
}
if(width != 0)
{
putchar('\n');
}
return 0;
}
syntax highlighted by Code2HTML, v. 0.9.1