Hola Rafael,
Te aclaro algo, todos los archivos son binarios, la unidad minima que contienen todos los archivos es el byte.el famoso paquetito de 8 bits.
Un archvio puede contener 0 bytes ( el archivo esta vacio ) o x cantidad de bytes.(( los archivos nunca son pesados indepeendientemente de su longitud ). Los bytes en un archivos tienen orden , no por valor sino por posicion , es decir
primer byte segundo byte .....
tenemos primer byte y ultimo byte ( final del archivo ).
y te repito son todos binarios.
el punto es cual es la interpretacion que vos le vas a dar a esos valores de bytes( el rango es de 0 a 255 en un unsigned byte ).
la funcion scanf y sus derivados ( fscanf ) es un poco problematica y te puede generar algunos problemitas si lees directamente del archivo,
lo mejor o mas aconsejable es leer con fgets un buffer ( que puede ser de 256 byes unsigned char buff[256] ,)
y sobre este buff lo usas con sscanf ; sscanf( buff , ......
fijate con
$man fgets
y
$man sscanf
Saludos Daniel.