|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||
|
Invité de passage
![]() Inscription : février 2013 Messages : 4 ![]() |
Bonjour,
Je cherche à récupérer les données d'un fichier codé en binaire et de le convertir en décimal (il s'agit d'une image dont chaque pixel est représenté par un chiffre représentant son intensité). J'ai fait un petit script dans lequel je récupère ces données : Code :
Quelqu'un pourrait-il m'aider siouplait ? Merci d'avance. |
||
|
|
00
|
|
|
#2 | ||||
![]() ![]() |
Bonjour,
Les entiers sont stocké dans un ordinateur en binaire. Un entier est codé sur un ou plusieurs octets. Quand tu va écrire dans un fichier en binaire avec (f)write tu va copier tous les octets constituant cet entier. Par exemple si tu as un int i valant 10 (soit 0xA en hexadécimal), tu va écrire dans ton fichier 0xA soit : 00000000 0000000 0000000 00001010 Lorsque tu va lire ton fichier binaire, il te suffira de mettre ces bit dans un autre int avec (f)read Code :
Pour afficher le nombre en binaire, je ne pense pas qu'on puisse le faire simplement, on préfère généralement l'afficher en hexadécimal : Mais si tu veux vraiment l'afficher en binaire, il va faloir extraire chaque bit : Code :
- la taille des variable : selon la plate-forme un int peut être stocké sur 4, 8 octets (ou autre). Donc si tu lis à partir d'une plate-forme où un int est codé sur 8 octets, tu va lire 8 octet sur ton fichier. Mais si tu écris à partir d'une plate-forme où un int est codé sur 4 octets, tu ne va écrire que 4 octets. Cf ce tutoriel - l'endianness : comme je l'ai dit un entier est codé sur un ou plusieurs octets mais "l'ordre" des octets peut aussi varier d'une plate-forme à l'autre. Prenons l'exemple d'un entier codé sur 2 octets on a : 0x0102 = 00000001 00000010 = 1*256 + 2 = 257 Mais sur certaines plate-formes, on va avoir : 0x0102 = 00000010 00000001 = 2 + 1*256 = 257 Dans ton fichier tu auras donc des valeurs différences. Heureusement les fonctions htons sont là pour nous aider Pour le ET bit à bit un lien de la FAQ : http://c.developpez.com/faq/?page=op...URS_amper_mask.
__________________
Recherche devs C++ motivés et sérieux pour Last Dungeon. Chaîne Youtube : Vidéos Ma page DVP : http://neckara.developpez.com/ |
||||
|
|
10
|
|
|
#3 |
|
Invité de passage
![]() Inscription : février 2013 Messages : 4 ![]() |
re Neckarra,
Tout d'abord, merci beaucoup pour ta réponse. J'aurais toutefois une petite question a te poser: dans le fread, pourquoi rajouter un (char*)puisque les int sont deja stockés dans un (int*) ?? |
|
|
00
|
|
|
#4 | |
![]() ![]() |
Citation:
__________________
Recherche devs C++ motivés et sérieux pour Last Dungeon. Chaîne Youtube : Vidéos Ma page DVP : http://neckara.developpez.com/ |
|
|
|
00
|
Copyright © 2000-2013 - www.developpez.com