Bonjour,
Ceci est mon premier post sur ce forum. J'ai une année de pratique du C++.
---
Voici ma question :
Ce petit bout de code me donne un resultat que je trouve étrange :
Il s'agit d'ouvrir un fichier bmp et d'en lire les 5 premiers caractères
Sortie :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 ifstream fichier("test.bmp", ios::in | ios::binary); for(short int i = 0; i<5; ++i) { char c; fichier.get(c); cout<<(int) c<<endl; } fichier.close();
On remarque que les deux premiers caractères (66 et 77) correspondent respectivement au 'B' et 'M' de l'en-tête du fichier BMP.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 66 77 -8 -41 13
Seulement, pourquoi est-ce que les deux caractères suivants sont négatifs ?
De plus, si on exécute cet autre bout de code :
on obtient :
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 ifstream f("test.bmp", ios::in | ios::binary); int i = 0; char c[2]; f.read( &c[0], sizeof(char) ); f.read( &c[1], sizeof(char) ); f.read( (char *) &i, sizeof(int) ); cout<< c <<endl; cout<< i <<endl; f.close();
Où 907 256 correspond à la taille du fichier bmp en octet (cf. résumé sur le format bmp : http://andrew.csie.ncyu.edu.tw/zip/Bmp1.htm)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3BM°Î 907256
Ne devrais-je pas avoir en sortie:
?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 BM 907 256
Je vous remercie d'avance pour vos réponses
Damien
---
Note : voici le début de l'en-tête d'un fichier bmp
+--------+--------+--------+--------+
| Char 'B' | Char 'M'| Taille en [...] |
+--------+--------+--------+--------+
| octets du fichier |
+--------+--------+--------+--------+
Partager