Forums Rue-Montgallet.com
Rue-Montgallet.comRue-Hardware.comRue-Occasion.comRue-DVD.comRue-Jeuxvideo.comRue-AudioVideo.comRue-Telephone.comForums
S'inscrire | S'identifier |
| Recherche avancée | Aide
 
 

Il y a 77 utilisateurs connus et inconnus. Pour voir la liste des connectés connus, cliquez ici

 Mot :   Pseudo :  
 
Bas de page
Auteur
 Sujet :

c/c++ pb de lecture d entete de fichier

 
n°13826
doudouyam
Profil : Jeune recrue
Posté le 22-06-2005 à 13:34:15  profilanswer
 

Bonjour;  
Je dois lire un fichier binaire d une image et ds un premier tps j essaye de recuperer l entete ki decrit cette image. Pour ca je creer une structure contenant ces info et je lis le fichier avec cette structure. (cf code)  
Mais lorsque je fait ca, les valeurs sont fausses, plus exactement les deux long de la structure en exemple  (normalement cette structure est bcp plu grossse) Alors ke si je lis tt les elements de la structure un par un, les valeurs sont exactes.  
 
voila code (en simplifier)  
 
 
typedef struct{  
 char Signature[5];  
 char Version[5];  
 char FinDeFichier;  
 long TailleEnteteFilm;  
 long TailleEnteteTrame;  
}  
 
 
main(){  
 
FILE *fp;  
char *file="Nom du fichier";  
TypeFilm TF;  
 
if((fp=open(file,"rb" ))==NULL)  
 return ERROR;  
 
rewind(fp);  
 
 
/*********************************************************************/  
  METHODE 1  
/*********************************************************************/  
 
if(fread(&TF,sizeof(TypeFilm),1,fp)!=1)  
 return ERROR;  
 
/*********************************************************************/  
  METHODE 2  
/*********************************************************************/  
 
/*  
if(fread(&TF.Signature,sizeof(TF.Signature),1,fp)!=1)  
 return ERROR;  
 
 
if(fread(&TF.Version,sizeof(TF.Version),1,fp)!=1)  
 return ERROR;  
 
 
if(fread(&TF.FinDeFichier,sizeof(TF.FinDeFichier),1,fp)!=1)  
 return ERROR;  
 
 
if(fread(&TF.TailleEnteteFilm,sizeof(TF.TailleEnteteFilm),1,fp)!=1)  
 return ERROR;  
 
 
if(fread(&TF.TailleEnteteTrame,sizeof(TF.TailleEnteteTrame),1,fp)!=1)  
 return ERROR;  
*/  
/*********************************************************************/  
 
 
}  
 
J ai aussi essyer en creant un pointeur *FP et en lui allouant la memoire avc malloc mais ca fait la mm chose... Auriez vous une idee ??? ( Ca fait 2 jours ke je suis la dessus je sais plus koi faire    ).

n°13827
P-Y
Intermittent du troll
Profil : Vieux de la vieille
Posté le 22-06-2005 à 14:10:53  profilanswer
 

C'est normal, le sizeof d'une struct est en general plus grand que le sizeof de ses champs car le compilateur laisse du vide dans la structure pour des questions d'alignement d'adresse en memoire.
tu peux essayer de rajouter __attribute__ ((packed)) juste apres la delcaration de la structure pour qu'il garde les champs groupes, mais je te garantis pas que ca marche.


Message édité par P-Y le 22-06-2005 à 14:12:17

---------------
"Comme la Hongrie, le monde informatique a une langue qui lui est propre. Mais il y a une différence. Si vous restez assez longtemps avec des Hongrois, vous finirez bien par comprendre de quoi ils parlent."
[:zzzinv][url=http://www.mozilla-europe.
n°13831
doudouyam
Profil : Jeune recrue
Posté le 22-06-2005 à 17:37:52  profilanswer
 

Merci pour le renseignement, ca a l air de correspondre a mon pb. J ai essayer d utiliser __attribute__ ((packed)) un peu partout et ds tt les sens ds ma structure mais ca ne compile pas.
Y a t il besoin de rajouter des librairies ou quelque chose d autre ??? (Je regarde sur le net mais je ne trouve pas d info precises)
++

n°14402
podone
POD first ONE of best game
Profil : Habitué
Posté le 01-08-2005 à 21:37:46  profilanswer
 

Regarde dans les options de projet l'alignement (option /Z, je crois)


Aller à :
Ajouter une réponse