Bonjour,
Je dois écrire une suite valeur dans un fichier binaire.
Par exemple, j'ai 3 variables:
1 unsigned char qui vaut 0xB1
1 unsigned char qui vaut 0xC2
1 unsigned short qui vaut 0xA0B3
je souhaite que mon fichier contiennent B1C2A0B3 (en binaire, pas en texte)
J'ai eu au début l'idée d'utiliser l'opérateur "<<"
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 ofstream fileOut("test.bin", ios_base::binary) unsigned char v1 = 0xB1; unsigned char v2 = 0xC2; unsigned short v3 = 0xA0B3; fileOut << v1; fileOut << v2; fileOut << v3; fileOut.close();
Problème: si j'ouvre mon fileout dans un editeur hexa, il contient: B1 C2 34 31 31 33 39
C'est-à-dire que pour le B1 et le C2 ça marche comme je voudrais, mais pour l'unsigned short, ce qu'on voit c'est les caractères ascii de la représentation décimale de la valeur!
(0xA0B3 = 41139, en ascii "34 31 31 33 39")
J'ai essayé avec quelques manipulateurs comme std::ios::hex mais sans succès...
J'ai donc utilisé une deucième méthode, un peu moins belle a mon gout. Je commence par remplir un buffer avec toutes les valeurs, et je l'écris dans le fichier en une fois avec la fonction write:
cette fois le fichier est pas trop mal, a part un problème d'endianess avec le unigned short: j'obtient B1 C2 B3 A0
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
16 unsigned char buffer[4] ofstream fileOut("test.bin", ios_base::binary) unsigned char v1 = 0xB1; unsigned char v2 = 0xC2; unsigned short v3 = 0xA0B3; buffer[0] = v1; buffer[1] = v2; memcpy(&buffer[2],&v3,sizeof(v3)) fileOut.write(buffer,sizeof(buffer)); fileOut.close();
Je pourrai gérer ce problème d'endianess, mais je suppose qu'il y a une vraie methode "à la C++" avec des iostreams et ce genre de trucs qui doit pouvoir faire exactement ce que je veux faire, non?
Apres tout, je veux juste écrire des valeurs dans un fichier binaire.
Quelle est la bonne méthode?
Merci!
Partager