Bonjour,
Je voudrais lire un fichier '.bin ' qui est écrit en HEX. Et voici un aperçu du fichier (1° ligne):
3f00 2011 4000 083f 0500 083f 0500 083f
Merci pour toute aide.
Bonne journée.
Alain
Bonjour,
Je voudrais lire un fichier '.bin ' qui est écrit en HEX. Et voici un aperçu du fichier (1° ligne):
3f00 2011 4000 083f 0500 083f 0500 083f
Merci pour toute aide.
Bonne journée.
Alain
C'est assez trivial
Tu vas lire des caractères. Tu vas lire 4 caractères par 4 caractères.
Mais comme ce sont des caractères, tu n'as qu'a retrancher le caractère '0'. Exemple '9' - '0' -> 9, le chiffre.
Pour les lettres 'A', 'B', 'C', 'D', 'E', 'F', il faut retrancher le caractère 'A' et ajouter 10. Exemple 'B' - 'A' + 10 -> 11, le nombre.
Maintenant c'est fini, c'est comme en décimal. 0x2A31 = 1x160 + 3x161 + 10x162 + 2x163
Édit :merci @Guesset pour sa correction. Et effectivement l'endianness (boutisme en français) est important, mais impossible à connaître à moins d'1 B.O.M. (byte order mark, indicateur d'ordre des octets)
Bonjour et merci pour votre réponse,
Honnêtement, je suis un peu désemparé. Je recherche une manière, un convertisseur, un fonctionnalité dans C++ ..., pour lire en intégralité un fichier .bin
Normalement (!??) c'est un fichier .cpp contenu dans ce fichier.bin
Merci pour votre écoute et j’espère avoir su vous transmettre ma préoccupation.
Bonne journée.
Alain
Bonjour,
Le fichier que tu veux convertir est un fichier texte.
Il contient un texte décrivant en hexadécimal des mots de 16 bits.
Un fichier qui a le suffixe .bin est un fichier dans un format dit propriétaire. Cela correspond donc à des données opaques qui ne sont compréhensibles que par celui qui l'a créé. Ces mots hexadécimaux semblent correspondre à un codage binaire qui me parait être un dump de mémoire qui semble correspondre du code machine. Une chose certaine, ça n'est pas un texte, donc ça n'est certainement pas un fichier .cpp, d'où sors-tu ce fichier?
Bonjour,
Un fichier .bin est un programme compilé, exécutable (il doit quand même être assez ancien : MS DOS)
Un fichier .bin, ça peut être tout et n'importe quoi, pas forcément un programme compilé. Tu pourras le lire mais sans savoir ce qu'il est censé contenir, tu ne pourras pas l'exploiter.Un fichier .bin est un programme compilé, exécutable
Ca peut être un firmware de routeur, un format propriétaire.
Si c'est lié à du C/C++ l'aspect cyclique pourrait me faire penser à un enregistrement du contenu d'une structure (c) ou d'un objet (c++) contenant par exemple des int, mais ça reste une spéculation et sans savoir ce que c'est censé contenir, on en revient au même problème.
Ma page sur developpez.com : http://chrtophe.developpez.com/ (avec mes articles)
Mon article sur le P2V, mon article sur le cloud
Consultez nos FAQ : Windows, Linux, Virtualisation
ouais, mais 1 fichier exécutable c'est du binaire et non pas des caractères qui forment des chiffres hexadécimaux.
je pense à la fonction sscanf (<- lien cplusplus.com en anglais)... mais il faut savoir combien de nombres contient 1 ligne et qu'il soit fixe/ constant.
Bonjour Foetus,
Je pense que ta solution correspond exactement à la demande cependant pour les caractère de '0' à '9', ce n'est pas '1' qu'il faut retirer mais '0'.
Par ailleurs il y a un présupposé sur l'endian que nous ne connaissons pas.
Pour reprendre ton exemple :
2A31 = 1x160 + 3x161 + 10x162 + 2x163 = 10801
mais avec un endian inverse :
2A31 = 1x163 + 3x162 + 10x161 + 2x160 = 5026
Salut
Partager