Newsgroup: it.comp.lang.c
Titolo: file binari e tipo char

Se ho un file di testo e voglio scrivere il codice ascii di un
carattere c scrivo
fprint ("%d",c,fp);
se invece voglio scriverlo su un file binario scrivo
fwrite ((int)c,sizeof(int),1,fp)..ma non funziona, mi ritrovo ancora
il carattere c sul file binario e non il suoi codice ascii nonostante
faccio in casting, dove sbaglio?

 faccio in casting, dove sbaglio?
devi comunque utilizzare fprintf, visto che ti serve una formattazione
il cast non non fa quello che pensi tu, e anzi direi che il passaggio del
primo argomento qui va contro il prototipo della funzione, visto che vuole 
un puntatore alla zona di memoria da scrivere (quindi semmai &c)
Tra binario e di testo cambia solo che lo devi aprire con fopen in modo
diverso: mi pare che si usi "wb" per l'apertura in scrittura di un file
binario.

...

Ok, dormivo un po' quando ho scritto il post precedente, ma il
problema resta.
Devo usare la FWRITE per scrivere su un file binario il codice asci di
un carattarere. Non posso usare la Frpintf

 un carattarere. Non posso usare la Frpintf
in questo caso la formattazione la devi fare tu a mano, se ad esempio hai
il carattere 'A' devi scrivere una routine che ti restituisca due
carattere, il '6' e il '5' (mi pare che A sia 65, no ?).
Cmq la famiglia *printf serve proprio a formattare la stringa che è
quello che ti serve; stai facendo un esercizio che non puoi utilizzare
fprintf ? Se puoi servirti di sprintf, guarda la sua manpage, ti può
essere d'aiuto
Byez
Matic

 Matic
Devo per forza utilizzare fwrite ho provato cosě
char c;
int i
...
c='a';
i=c;
fwrite(&i,sizeof(int),1,f);
ma invece di avere il file binario con dentro 99 ho il file binario con dentro c.
ma perchč visto che gli sto dicendo di scrivere un intero e non un carattere?

 ma perchè visto che gli sto dicendo di scrivere un intero e non un
carattere?
Prova ad aprirlo con un editor esadecimale...

 un carattarere. Non posso usare la Frpintf
Temo che tu abbia un po' di confusione mentale sul concetto di carattere 
e codice ascii.
Ogni carattere è rappresentato dal suo codice ascii che occupa un byte.
Il fatto che il file sia binario o di testo non inficia sulla 
rappresentazione del carattere. Indipendentemente da come tu apra il 
file quando scriverai un carattere verrà inserito nel file un byte con 
il valore ascii del carattere.
Non ho ben capito cosa vuoi ottenere.
Vuoi forse fare in modo che nel file vengano inseriti 2 o 3 caratteri 
rappresentanti in decimale ( o in hex ) il valore del codice ascii ?
Ciao
Ricky

 il valore ascii del carattere.
...la rappresentazione ascii del carattere...


>...la rappresentazione ascii del carattere...
Tu apri il file che crei tramite un editor di testi? Se e' cosi'
questo credo sia il problema... per fare una prova scrivi nel file un
numero > 256 e osserva cosa vien fuoi.
Nel migliore dei casi vedrai due o piu' quadrati pieni (notepad)
oppure quadrati vuoti con altri prog...
Questo accade perche' un numero ASCII che rappresenti un carattere
verra' interpretato come un carattere (e quindi visualizzato come
tale) da un editor di testo... 
Ciao,
Maurizio

 un carattere?
Perche' tu lo guardi con un programma che associa ad un valore numerico il
corrispondente carattere ascii, direi che il programma funziona
egregiamente.

Non ho capito se ti riferivi a me ma io sono daccordo. Dissentivo solo sul
fatto che non si sta parlando di valore ascii ma di rappresentazione. Qui si
parla di 1 byte e questo oltre 256 non ci và neanche se i bit si fanno
stretti stretti. Quello che intendevo dire e che se un char lo inizializzi a
3 e lo spari in un file quando guarderai nel file, che sarà lungo 1 byte, ci
troverai un cuoricino e che 3 è l'indice, in dacimale, della tabella ascii
nella quale alla terza posizione si trova il cuoricino.
Ora se l'indice lo vuoi esprimere in esadecimale questo non cambia che è un
indice. In ogni caso, se visualizzi il file, tu vedrai la _rappresentazione_
ascii di un byte il cui valore è 3.