File di testo e file binari
mentre leggevo i lucidi mi è venuto un dubbio, cosa vuol dire che i file di testo necessitano di una conversione tra ogni lettura e scrittura ??
significa che, mentre per leggere un dato da un file binario il
C ricopia i byte che sono sul file sull'area di memoria stabilita dalla
fread
, nella fscanf
deve eseguire delle conversioni.
Ad esempio, il numero 123, inteso come short int, e` costituito da 16 bit (2 byte):
00000000 01111011
quindi sul file binario ci sono proprio questi due byte: 00000000 01111011.
Se leggo con una fread:
short int i;
fread(&i,2,1,f);
per leggere questo dato sulla una variabile i, il C non deve fare alcuna conversione: ricopia i 2 byte sulla variabile i.
Se, invece, avessi usato un file di testo, avrei dovuto rappresentare il numero 123 come sequenza di 3 caratteri: '1', '2' e '3'. Ciascuno di questi caratteri e` rappresentato con il suo codice ASCII:
'1' = 00110001
'2' = 00110010
'3' = 00110011
quindi sul file di testo si trova la sequenza di bit: 00110001 00110010 00110011.
Quando il C esegue una fscan("%d",&i)
, la sequenza 00110001
00110010 00110011 deve essere convertita nel suo significato, che è il
numero 123, che come dicevamo, si rappresenta con 00000000 01111011,
prima di poter scrivere sulla variabile i.
Un analogo discorso vale per la scrittura.