La fgetc restituisce un int solo per poter avere i caratteri letti nel range 0-255 e poter restituire -1 in caso errore.
Per avere il carattere in formato char è sufficiente un cast.
codice:
char c=0;
int charcode = fgetc(fp);
if (charcode != -1) {
    c = (char) charcode;
}
Per quanto riguarda il resto, potresti prendere spunto dall'algoritmo di trasformazione in base64, che più o meno fa quello che ti serve.
http://it.wikipedia.org/wiki/Base64