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
mandate un messaggio di posta elettronica a bertoƶƶi@ce.unipr.it