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

VTS_35 Messages postés 17 Date d'inscription mercredi 14 avril 2004 Statut Membre Dernière intervention 18 mai 2004 - 15 avril 2004 à 10:08
VTS_35 Messages postés 17 Date d'inscription mercredi 14 avril 2004 Statut Membre Dernière intervention 18 mai 2004 - 16 avril 2004 à 10:31
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

ymca2003 Messages postés 2070 Date d'inscription mardi 22 avril 2003 Statut Membre Dernière intervention 3 juillet 2006 7
15 avril 2004 à 17:11
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
0
VTS_35 Messages postés 17 Date d'inscription mercredi 14 avril 2004 Statut Membre Dernière intervention 18 mai 2004
16 avril 2004 à 10:31
MERCI!

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