Bonjour à tous,
Je me tourne vers vous car je suis à cours d'idée pour résoudre ma problématique. Je galère un peu.
Je travail sur le développement d'un Reader de fichiers binaires issus d'une application qui s'appelle NASTRAN. Le format du fichier binaire est totalement indépendant de ma volonté.
Dans ces fameux fichiers se trouvent des résultats de calculs sur des structures mécanique (pièce d'avion, bateau, ...). Les résultats sont triés par type et répartis dans des blocs de données.
Et la je rencontre un cas particulier : j'ai un double dont les 4 premier octets sont sur la fin d'un bloc, et les 4 dernier octets sur le bloc suivant.
Et bien sur les deux bloc de données ne sont pas "collés" des informations sont écrites entre deux.
Alors j'ai imaginé une solution :
- Lire le binaire octet par octet en gérant le changement de bloc de donnée
- Réunir tous mes octets pour reconstituer mon double.
Et voici ma question :
Comment peut-on recréer un double à partir de mes 8 octets ?
voici un exemple simplifié de ce que je fait.
Ce code ne produit pas de bon résultat d'après mes tests.
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 byte b1,b2,b3,b4,b5,b6,b7,b8; std::fread(&b1,1,1,_pFile); std::fread(&b2,1,1,_pFile); std::fread(&b3,1,1,_pFile); std::fread(&b4,1,1,_pFile); //changement de bloc de donnée std::fread(&b5,1,1,_pFile); std::fread(&b6,1,1,_pFile); std::fread(&b7,1,1,_pFile); std::fread(&b8,1,1,_pFile); double d= (b1 << 64) | (b2 << 48) | (b3 << 40) | (b4 << 32) | (b5 << 24) |(b6 << 16) | (b7 << 8) | b8;
J'ai pensé à cherche du coté des flux, mais je ne maîtrise pas assez le sujet je pense.
Merci d'avance pour vos réponse.
Partager