Conversione da Decimale a Binario

di il
8 risposte

Conversione da Decimale a Binario

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);
}

8 Risposte

  • Re: Conversione da Decimale a Binario

    Significa sommare il valore ascii del carattere 0 in modo da ottenere il codice ascii corretto da vidualizzare
  • Re: Conversione da Decimale a Binario

    Si ma quando faccio la prima operazione, prendiamo ad esempio il numero 10 che dobbiamo convertire in binario.
    Il numero 10 in binario è 1010. Però a partire dal fondo siccome la conversione si fa in questo modo e infatti li metto nel vettore a partire dall'ultimo elemento, cosa succede?
    a[7]=(10%2)+'0';
    quindi 10%2 = 0
    0+'0' che valore mi da?
  • Re: Conversione da Decimale a Binario

    Ti ho già detto che sommi il valore ASCII del carattere 0

    Sai cosa sia la tabella ASCII e come vengono visualizzati i caratteri in un computer?
  • Re: Conversione da Decimale a Binario

    Si, so cos'è la tabella ASCII però probabilmente non so come venga visualizzato.
    Me lo potresti spiegare per favore?
    Scusa ma è il primo esercizio che incontro dove devo inserire un valore ASCII, l'ho studiato per la teoria ma non saprei come applicarla al caso presente.
  • Re: Conversione da Decimale a Binario

    Se vuoi visualizzare il carattere 0 con

    printf("%c", v);

    quanto deve valere v ?
  • Re: Conversione da Decimale a Binario

    48?? che mi risulta essere il numero in decimale associato allo 0 in ASCII
  • Re: Conversione da Decimale a Binario

    Appunto ... che poi è il valore che viene sommato ovvero +'0' che equivale a +48 proprio per fare in modo che 0 binario diventi 48 e 1 diventi 49 ovvero caratteri visibili
  • Re: Conversione da Decimale a Binario

    Perfetto grazie mille Oregon!! Mi sei stato di grande aiuto!
Devi accedere o registrarti per scrivere nel forum
8 risposte