Lecture de données Hexa sur 4octets avec inversion dees bits de poids faible/for

Signaler
Messages postés
17
Date d'inscription
mercredi 14 avril 2004
Statut
Membre
Dernière intervention
18 mai 2004
-
Messages postés
17
Date d'inscription
mercredi 14 avril 2004
Statut
Membre
Dernière intervention
18 mai 2004
-
bonjour,

G un gros problème de lecture de données.
Je bosse sur des fichiers genre images bmp et je dois en lire l'entete.

voici les première variables de l'entete:

struct head {
char Signature[5]; //signature du fichier sur 5 octets
char Version[5]; //version du fichier, 5o
char ASCIIEndOfFile;// pointeur de fin de fichier, 1o
unsigned long MainHeaderSize;// taille de l'entete principale 4o
unsigned long FrameHeaderSize;// taille de la frame principale 4o
...
}entete;

et voici le code hexa du fichier:

0 | 43 45 44 00 00 35 2e 30 30 00 1a 00 08 00 00 00
10 | 04 00 00 ...

Ce qui donne:
signature : 43 45 44 00 00 => "CED"
version : 35 2e 30 30 00 => "5.00"
ASCIIEndOfFile : 1a => '->'
MainHeaderSize : 00 00 08 00 => 2048
FrameHeaderSize: 00 00 04 00 => 1024
...

Sauf que quand je tente de lire les données, j'obtiens bien la signature et la version qui sont des chaines de caractères, mais pour tout ce qui est donnée numérique (MainHeaderSize et FrameHeaderSize par exemple), je trouve 0.
Car il lit pas au bon format! par exemple, au lieu de lire 00 00 08 00 il lit les données en inversant les octets deux par deux (je sais, C un peu dur à suivre!)

en gros, sur le fichier on a 00 08 00 00, ça devrait se traduire par 00 00 08 00 mai le programme le lit comme 00 00 00 08

Je C pas comment y remédier... Surtout que je me suis pas remis au C/C++ depuis un bail...

Bref, si qqun pouvait m'aider, je serait très reconnaissant! =)

Merci d'avance

2 réponses

Messages postés
2070
Date d'inscription
mardi 22 avril 2003
Statut
Membre
Dernière intervention
3 juillet 2006
8
par défaut les membres de la structure sont alignés sur 4 octets (ou 8 cela dépend du compilo).

lorsque tu as des structures qui lise des données dans des fichiers il faut aligner les membres sur 1 octet :

#include
struct
{
};
{include
Messages postés
17
Date d'inscription
mercredi 14 avril 2004
Statut
Membre
Dernière intervention
18 mai 2004

MERCI!

Je V me créer une petite fonction pour lire 4octets.. ça devrait aller...