Bonjour,

J'ai un petit probleme avec fread()...
Je dois lire dans une partie binaire d'un fichier des donnees. (les types sont fournis dans la doc...)

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
 
typedef struct ScalingFactors ScalingFactors;
struct ScalingFactors
{
    float altitude;
	float rough;
	float zon_wind;
	float merr_wind;
	float atm_pres;
	float ozone;
	float rel_hum;
	float *rad;
	unsigned char *gain_set;
	unsigned long samp_rate;
	float *sun_spec_flux;
	char spare_1;
};
 
ScalingFactors scalFact;
 
void readInfoScalFact(char* filename, DataSetDescription dsd)
{
    FILE *file = fopen(filename,"rb");
    if(file != NULL)
    {
        fseek(file,dsd.offset,SEEK_SET);
        fread(&scalFact.altitude,sizeof(float),1,file);
        fread(&scalFact.rough,sizeof(float),1,file);
        fread(&scalFact.zon_wind,sizeof(float),1,file);
        fread(&scalFact.merr_wind,sizeof(float),1,file);
        fread(&scalFact.atm_pres,sizeof(float),1,file);
        fread(&scalFact.ozone,sizeof(float),1,file);
        fread(&scalFact.rel_hum,sizeof(float),1,file);
        scalFact.rad = (float*)malloc(sizeof(float)*15);
        fread(scalFact.rad,sizeof(float),15,file);
        scalFact.gain_set = (unsigned char*)malloc(sizeof(unsigned char)*16*5);
        fread(scalFact.gain_set,sizeof(unsigned char),16*5,file);
        fread(&scalFact.samp_rate,sizeof(unsigned long),1,file);
        scalFact.sun_spec_flux = (float*)malloc(sizeof(float)*15);
        fread(scalFact.sun_spec_flux,sizeof(float),15,file);
        fread(&scalFact.spare_1,sizeof(char),1,file);
        fclose(file);
    }
    else
    {
        printf("Error while opening %s in binary mode",filename);
    }
}
 
void displayScalFact()
{
    int i;
    printf("Scaling Factors : \n\taltitude : %lf\n\troughness : %f\n\tzonal wind : %f\n\tmeridional wind : %f\n\tAtmospherique pressure : %f\n\tOzone : %f\n\tRadiances :",scalFact.altitude,scalFact.rough,scalFact.zon_wind,scalFact.merr_wind,scalFact.atm_pres,scalFact.ozone);
    for(i=0;i<15;i++)
    {
        printf("\n\t\tRadiance (%i) : %lf",(i+1),scalFact.rad[i]);
    }
    printf("\n\tGain Set : ");
    for(i=0;i<16*5;i++)
    {
        printf("\n\t\tGain Set (%i) : %i",(i+1),scalFact.gain_set[i]);
    }
    printf("\n\tsampling rate = %ld",scalFact.samp_rate);
    printf("\n\tSpectral Flux : ");
    for(i=0;i<15;i++)
    {
        printf("\n\t\tSpectral Flux (%i) : %f",(i+1),scalFact.sun_spec_flux[i]);
    }
    printf("\n\tSpare : %i",scalFact.spare_1);
 
}
(Aucune erreurs de compilation)
Voila, donc le probleme est que je n'ai que des valeurs erronnee, sauf pour les 80 lectures pour le "gain_set". J'affiche peut-etre mal les variables... Je sais pas... Je suis sur que c'est une erreur toute bete mais je ne trouve pas...

Pour information je suis sous Windows XP avec Code::Blocks compilateur GNU GCC.

Merci...

PS : desole, mais je suis en stage en Angleterre => donc clavier QWERTY et je sais pas faire les accents .


EDIT : Je viens de tester une autre solution : qui ne marche pas (meme resultats)

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
 
typedef struct ScalingFactors ScalingFactors;
struct ScalingFactors
{
    float altitude;
	float rough;
	float zon_wind;
	float merr_wind;
	float atm_pres;
	float ozone;
	float rel_hum;
	float rad[15];
	unsigned char gain_set[80];
	unsigned long samp_rate;
	float sun_spec_flux[15];
	char spare_1;
};
 
void readInfoScalFact(char* filename, DataSetDescription dsd)
{
    FILE *file = fopen(filename,"rb");
    if(file != NULL)
    {
        fseek(file,dsd.offset,SEEK_SET);
        fread(&scalFact,sizeof(ScalingFactors),1,file);
        fclose(file);
    }
    else
    {
        printf("Error while opening %s in binary mode",filename);
    }
}