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

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();
Sortie :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
 
66
77
-8
-41
13
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.

Seulement, pourquoi est-ce que les deux caractères suivants sont négatifs ?

De plus, si on exécute cet autre bout de code :

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();
on obtient :

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)

Ne devrais-je pas avoir en sortie:
?

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 |
+--------+--------+--------+--------+