deggial
18-01-2007, 11:43
Ciao a tutti, ho un problema con C...
Devo prendere un file ed estrarre byte per byte. Il codice che uso è questo:
#include <iostream>
int main()
{
char buf[30];
int elementi, dimensione;
int n;
FILE *fp, *ft;
int i;
elementi=30;
dimensione=1;
fp=fopen ("C:/provetds/prova2", "r");
n=fread (buf, dimensione, elementi, fp);
ft=fopen ("C:/provetds/ris.txt", "w");
for (i=0; i<30; i++) {
fprintf (ft, "%12d \t %12u \t %12X \n", buf[i], buf[i], buf[i]);
}
return 0;
}
Cioè prendo il file e passo char per char i dati dentro un buffer.
Poi li scrivo su un file di testo per controllo.
Vi riporto i risultati, nella prima colonna ci metto i codici hex originali, quindi nella seconda ci sarà il contenuto di buf[] formattato come intero con segno, nella terza ci sarà l'intero senza segno, nella quarta l'esadecimale.
01 1 1 1
F2 -14 4294967282 FFFFFFF2
03 3 3 3
04 4 4 4
11 17 17 11
1A 62 62 3E
31 3 3 3
41 0 0 0
91 80 80 50
Ci sono due problemi:
1- finchè i numeri sono sotto il 128(decimale), legge bene. Quando sono superiori al 128, fa casini. Nel codice hex aggiunge FFFFFF, e nell'unsigned da numeri assurdi (aggiunge penso la parte relativa all'FFFFFF)
2- alla prima occorrenza di A1 nel file originale, sbaglia a leggere tutti i codici da lì in poi.
Chi può dirmi qualcosa?
Per il problema 1 penso sia una mia incompetenza, il 2 invece non me lo so spiegare.
ps: Il prog è stato compilato su due pc diversi con due compilatori diversi (visual c++ e mingw) è si comporta nello stesso modo
Devo prendere un file ed estrarre byte per byte. Il codice che uso è questo:
#include <iostream>
int main()
{
char buf[30];
int elementi, dimensione;
int n;
FILE *fp, *ft;
int i;
elementi=30;
dimensione=1;
fp=fopen ("C:/provetds/prova2", "r");
n=fread (buf, dimensione, elementi, fp);
ft=fopen ("C:/provetds/ris.txt", "w");
for (i=0; i<30; i++) {
fprintf (ft, "%12d \t %12u \t %12X \n", buf[i], buf[i], buf[i]);
}
return 0;
}
Cioè prendo il file e passo char per char i dati dentro un buffer.
Poi li scrivo su un file di testo per controllo.
Vi riporto i risultati, nella prima colonna ci metto i codici hex originali, quindi nella seconda ci sarà il contenuto di buf[] formattato come intero con segno, nella terza ci sarà l'intero senza segno, nella quarta l'esadecimale.
01 1 1 1
F2 -14 4294967282 FFFFFFF2
03 3 3 3
04 4 4 4
11 17 17 11
1A 62 62 3E
31 3 3 3
41 0 0 0
91 80 80 50
Ci sono due problemi:
1- finchè i numeri sono sotto il 128(decimale), legge bene. Quando sono superiori al 128, fa casini. Nel codice hex aggiunge FFFFFF, e nell'unsigned da numeri assurdi (aggiunge penso la parte relativa all'FFFFFF)
2- alla prima occorrenza di A1 nel file originale, sbaglia a leggere tutti i codici da lì in poi.
Chi può dirmi qualcosa?
Per il problema 1 penso sia una mia incompetenza, il 2 invece non me lo so spiegare.
ps: Il prog è stato compilato su due pc diversi con due compilatori diversi (visual c++ e mingw) è si comporta nello stesso modo