Perchè fprintf e fscanf non puoi scrivere in binario!?
codice:
...
/* scrittura */
  for(j = 0; j < BUF_SIZE; j++)
    fwrite(BUFFER[j], sizeof(short int), 1, fp);
...
 /* lettura */
  fread(&carattere, sizeof(short int), 1, fp);
Piu veloce e piu pratico.