#include typedef unsigned char byte; main() { char *input = "qNaGJBAc74IQ74L77YJuLlg6gigY5eUY7xwY54IkGOf/EAQYgmiCKCQugigY5eUY7xwY54aCqNb1" "BuXJ9QblyYLt6fUG5cn1BuXJ6e3p6QAMBOv5BBQY55T1BuXJDHx8Eu0G7f8A79ao1oYEEgAaEIJo" "gkTt7/8Y5+UA+xDt74aCqNbngvmCYH6C7eeCYHxM1g==" ; int i; char dtable[256]; for (i = 0; i < 255; i++) { dtable[i] = 0x80; } for (i = 'A'; i <= 'I'; i++) { dtable[i] = 0 + (i - 'A'); } for (i = 'J'; i <= 'R'; i++) { dtable[i] = 9 + (i - 'J'); } for (i = 'S'; i <= 'Z'; i++) { dtable[i] = 18 + (i - 'S'); } for (i = 'a'; i <= 'i'; i++) { dtable[i] = 26 + (i - 'a'); } for (i = 'j'; i <= 'r'; i++) { dtable[i] = 35 + (i - 'j'); } for (i = 's'; i <= 'z'; i++) { dtable[i] = 44 + (i - 's'); } for (i = '0'; i <= '9'; i++) { dtable[i] = 52 + (i - '0'); } dtable['+'] = 62; dtable['/'] = 63; dtable['='] = 0; while (true) { byte a[4], b[4], o[3]; for (i = 0; i < 4; i++) { int c = *input++; if (dtable[c] & 0x80) { { fprintf(stderr, "Illegal character '%c' in input file.\n", c); exit(1); } /* Ignoring errors: discard invalid character. */ i--; continue; } a[i] = (byte) c; b[i] = (byte) dtable[c]; } o[0] = (b[0] << 2) | (b[1] >> 4); o[1] = (b[1] << 4) | (b[2] >> 2); o[2] = (b[2] << 6) | b[3]; i = a[2] == '=' ? 1 : (a[3] == '=' ? 2 : 3); for (int j = 0; j < i; j++) printf(' ' < o[j] && o[j] < 127 && o[j] != '#' ? "%c" : "#%02X", o[j]); if (i < 3) { return 0; } } }