Buonasera a tutti, volevo sapere se potevate aiutarmi con un esercizio di programmazione in C.
Il testo dell'esercizio è questo:
Creare i file binary.h e binary.c che consentano di utilizzare la seguente funzione:
extern void stampa_binario(const char* filename_in, const char* filename_out);
La funzione accetta in input due stringhe C. La prima contiene il nome di un file da aprire in modalità lettura non tradotta (binaria). Se il file esiste si deve creare in modalità scrittura tradotta (testo) un file utilizzando il nome passato come secondo parametro.
La funzione deve scrivere in output per ogni byte del file di input la sua rappresentazione in base 2 in formato testo utilizzando i caratteri ‘0’ e ‘1’ e dopo ogni byte scritto inserire uno spazio. Ogni 8 byte così scritti si deve inserire un carattere <a capo>.
Ad esempio, se abbiamo un file che contiene 2 byte che valgono 171 e 205 deve produrre un file contenente:
10101011 11001101.
Il mio codice funziona ma per la conversione da binario a decimale ho letto un suggerimento che dice di fare come alla riga che ho evidenziato indicando con una freccia. Qualcuno mi potrebbe spiegare che significare fare
+ '0' ?
#include "binary.h"
void stampa_binario(const char* filename_in, const char* filename_out){
FILE *fin, *fout;
size_t i = 0;
fin = fopen(filename_in, "rb");
if (fin == NULL)
return;
fout = fopen(filename_out, "wt");
if (fout == NULL)
return;
while (1){
int c = fgetc(fin);
if (c == EOF)
break;
char a[8];
for (size_t i = 0; i < 8; i++){
a[8 - 1 - i] = (c % 2) + '0'; <------------
c = c / 2;
}
a[8] = 0;
fprintf(fout, "%s ", a);
i++;
if (i == 8)
{
fprintf(fout, "\n");
i = 0;
}
}
fclose(fin);
fclose(fout);
}