01: // lettura di parte di un file binario in array
02: #include<stdio.h>
03: #include<stdlib.h>
04: 
05: #include<ctype.h>
06: 
07: #define SIZE (200)
08: 
09: int main(int argc, char **argv){
10: 
11:   unsigned char buffer[SIZE];
12:   int i,j;
13:   char myfile[] = "files/test.gif";
14: 
15:   FILE *bf;
16: 
17:   bf=fopen(myfile, "rb"); // notare la 'b'
18:   if(!bf)
19:   {
20:     perror("Errore non riesco ad aprire il file");
21:     exit(1);
22:   }
23: 
24:   i = fread(buffer, sizeof(unsigned char), SIZE, bf); // leggo 200 elementi e li pongo nell'array "buffer"
25:   fclose(bf);
26: 
27:   printf("Dal file [%s] ho letto %d bytes\n", myfile, i); // il valore restituito da fread() permette di verificare quanti elementi ho letto
28: 
29: 
30:   // stampo quanto letto su due colonne, una che contiene il valore esadecimale di ogni singolo byte
31:   // e una che contiene il relativo carattere se e solo se stampabile
32:   printf("-------------------------------+------------");
33: 
34:   for(i=0; i < SIZE; i+=10) // considero 10 caratteri alla volta
35:   {
36:     printf("\n");
37:     for(j=0; j< 10; ++j) // in questo ciclo stampo i valori esadecimali
38:     {
39:       printf("%02x ", buffer[i+j]);
40:     }
41: 
42:     printf(" | ");
43: 
44:     for(j=0; j< 10; ++j) // in questo ciclo stampo i caratteri (se stampabili)
45:     {
46:       unsigned char c = buffer[i+j];
47:       if(isprint(c)) // isprint() mi permette di capire se e' un carattere stampabile
48:   printf("%c", c);
49:       else
50:   printf(" "); // se non lo e' stampo uno spazio per mantenere incolonnamento
51:     }
52: 
53:   }
54: 
55:   printf("\n-------------------------------+------------\n");
56: 
57:   return 0;
58: }
59: 
60: 


Se avete commenti o osservaƶioni su questa pagina
mandate un messaggio di posta elettronica a bertoƶƶi@ce.unipr.it