cs_nico20000
Messages postés4Date d'inscriptionsamedi 7 juin 2003StatutMembreDernière intervention 8 mars 2005
-
19 nov. 2003 à 13:16
cs_nico20000
Messages postés4Date d'inscriptionsamedi 7 juin 2003StatutMembreDernière intervention 8 mars 2005
-
20 nov. 2003 à 19:30
Bonjour,
j'ai besoin de lire dans un fichier binaire dont l'entête
ressemble à ceci: (traduite en hexa)
Properties gc90063 num FTPLocal le 17/11/2003
Je dois récupérer la chaine gc90063 et la date.
Ensuite le fichier est organisé de la façon suivante:
0A 00 00 00 00 0B 00 01 02 03
----- -- -- -- ----- -- -- --
Heure E1 E2 E3 Heure E1 E2 E3
On a l'heure en minute sur les 2 premiers octets, suivi de
3 entiers entre 0 et 255 sur les 3 octets suivants.
J'ai créé une structure :
struct RECORDS
{
short heure_en_min;
char cpt1;
char cpt2;
char cpt3;
};
Comment puis-je lire le fichier binaire pour récupérer le
header puis les différents enregistrements ?
cs_neodante
Messages postés2835Date d'inscriptionlundi 11 août 2003StatutModérateurDernière intervention16 décembre 200611 19 nov. 2003 à 13:41
:big) Neodante :big)
Juste pour t'aider un peu on ouvre un fichier en binaire avec l'attribut "rb" (lecture) ex:
fopen("toto.dat", "rb");
Ensuite un petit malloc et un fread() avec un size(struct RECORDS) pour la taille (la quantité est à 1!) et la fonction te placera tes données directement dans ta jolie structure que tu n'auras plus qu'à lire !
Exemple d'un bout de code pour lire des fichiers (de Tomb Raider) :
// Allocating memory for textiles (num_textiles * 256 * 256)
m_file_header->textile8 = new tr2_textile8[m_file_header->num_textiles];
// Load textiles
for (register ubit32 i = 0; i < m_file_header->num_textiles; ++i)
fread(&m_file_header->textile8[i], sizeof(tr2_textile8), 1, m_fp);
cs_neodante
Messages postés2835Date d'inscriptionlundi 11 août 2003StatutModérateurDernière intervention16 décembre 200611 19 nov. 2003 à 15:19
:big) Neodante :big)
Fais des sizeof (char), sizeof(struct RECORDS) et non pas sizeof(variable) ... tout devrait rentrer dans l'ordre.
Normalement ton code marche ... du moins pour moi :approve) !
@+
Vous n’avez pas trouvé la réponse que vous recherchez ?
cs_aardman
Messages postés1905Date d'inscriptionmercredi 22 janvier 2003StatutMembreDernière intervention17 septembre 20123 20 nov. 2003 à 00:15
Salut,
Pour la struct qui fait 6 octet au lieu de 5 c'est normal, c'est a cause de l'alignement des données.
En fait, le cpu ne manipule que des word (16bits) et lors de la compilation, le compilateur va rajouter un octet a ta structure pour qu'elle fasse 6 octets, soit 3*2 word, pour respecter ces regles d'alignements.