manupiler un fichier binaire - C - Programmation
Marsh Posté le 04-10-2005 à 17:27:53
demo2000 a écrit : si qlq à une meilleur idées ou un code plus simple je suis preneur ! |
Après un premier regard rapide, voici mes remarques
1) ton code en commentaire "switch(...)" pour assigner le "step" en fonction de la valeur de "INDIC" ne peut pas fonctionner. Chaque élément de "case" doit impérativement être une constante et ne peut pas être une variable. C'est parce que le compilo remplace le bloc "switch(...)" par des "goto" (tu remarqueras d'ailleurs que le "case" se termine toujours par des ":" représentatifs des labels)
2) "case default" n'existe pas (heureusement que c'est en commentaire)
3) je ne suis pas certain que step='1' ou step='2' corresponde à ce que tu veux. Il ne faut pas confondre la valeur "2" (notée 2) et le caractère "2" (noté '2')
4) plutôt que de faire plein de "if" pour assigner "step" en fonction de "indic", moi j'aurais créé une structure de correspondance et fait un balayage de recherche.
Exemple
Code :
|
Cela permet de faire évoluer ton programme plus facilement. Par exemple, si demain il y a la valeur "0x85" qui vient se rajouter dans les valeurs possibles, tu n'as qu'une ligne à rajouter dans mon exemple alors qu'il te faut programmer tout un bloc de test en plus dans ton programme.
Pour le reste, j'ai pas examiné en détail mais ça semble correct.
Marsh Posté le 04-10-2005 à 18:50:55
merci Sve@r pour tes remarques.
mon problème c'est que je n'arrive pas à avoir le bloc "nb"
quand je fais :
si step >= 2 alors :
Code :
|
il lis seulement le premier octet.
c.a.d:
Fichier binaire :
Citation : |
le length (en vert) est en Hexadecimal.
Merci encore pour votre aide.
Marsh Posté le 04-10-2005 à 11:52:17
bonjour,
j'ai fait un programme qui fait se qui suit :
Fichier binaire :
A1 A2 A3 A4 30 81 03 B1 B2 B3
A1 A2 A3 A4 30 82 00 04 B1 B2 B3 B4
A1 A2 A3 A4 30 83 00 00 03 B1 B2 B3 B4 B5
A1 A2 A3 A4 30 84 00 00 00 04 B1 B2 B3 B4 B5
A1 A2 A3 A4 30 07 B1 B2 B3 B4 B5 B6 B7
resultat :
30 81 03 B1 B2 B3
30 82 00 04 B1 B2 B3 B4
30 83 00 00 03 B1 B2 B3 B4 B5
30 84 00 00 00 04 B1 B2 B3 B4 B5
30 07 B1 B2 B3 B4 B5 B6 B7
1- supprimer les 4 premier octets (couleur orange).
2- lire le tag suivant '30' (couleur noir).
3- lire le tag suivant INDIC (couleur rouge)
4- lire le length de l'information :
si INDIC est 81 le length de l'information (couleur vert) est sur 1 octet, 82 --> 2octet, 83 -->3octet, 84 -->4 octet.
si non INDIC = length de l'information (dernière ligne dans l'exemple).
voilà ou je suis :
si qlq à une meilleur idées ou un code plus simple je suis preneur !
Merci