2009-09-09 8 views
1

J'écris dans un fichier binaire en utilisant fstream et lorsque j'ouvre le fichier en utilisant un drapeau binaire.Ecriture de données binaires

J'avais besoin d'écrire du texte en binaire, ce qu'une simple écriture a fait. Le problème est que j'ai aussi besoin d'écrire (comme indiqué en hexadécimal) 0. La valeur lors de l'ouverture dans le bloc-notes binaire est zéro, mais quand on essayait d'écrire cette valeur non nulle, elle était de 30 en hexadécimal.

Comment écrivez-vous des données spécifiques de ce type?

+0

Publiez du code si vous voulez, afin que nous puissions mieux comprendre ce que vous faites. –

+0

Utilisez-vous write ou < anno

+0

La sérialisation est un terme courant pour cela. – DanM

Répondre

1

Lorsque vous ouvrez le fstream, utilisez l'indicateur ios::binary pour spécifier la sortie binaire. Plus d'informations peuvent être trouvées here.

En ce qui concerne l'écriture 0, quand vous voyez 30 hexidecimal vous écrivez le caractère « 0 », et non le nombre binaire 0. Pour ce faire avec un fstream que vous pouvez faire quelque chose comme:

my_fstream << 0; 

Gardez à l'esprit que les données binaires 0 n'ont pas de représentation textuelle, vous ne pourrez donc pas les lire dans le Bloc-notes comme si vous pouviez lire le caractère '0'.

+0

Il l'a déjà fait. –

+0

Oui, le texte est mauvais, mais le lien est bon. – gimpf

+1

Vous avez probablement voulu dire: my_fstream << '\ 0'; – sbk

3

Vous avez probablement juste besoin de quelque chose comme ça, améliorer comme bon vous semble:

ofstream file("output.bin", ios::out | ios::binary); 
if (file.good()) 
{ 
    char buf[1] = {0}; 
    file.write(buf, sizeof(buf)); 
    file.close(); 
} 

Liens vers des solutions plus sophistiquées et la documentation ont déjà été affichés.

+0

Merci, il a fait l'affaire. Vous pouvez expliquer la différence entre écrire char c = "0"; et char c = {0}; ? –

+0

NP. Lorsque vous écrivez un "0", vous écrivez un _string_ avec un caractère zéro avec une valeur égale à son code ASCII 0x30h, et c'est pourquoi, lorsqu'il est ouvert dans le bloc-notes, vous l'avez vu comme un caractère zéro et 0x30 dans votre visionneuse hexadécimale . {0} équivaut essentiellement à remplir un tableau avec des zéros, et vous n'écriviez plus un 0x30h, mais un vrai 0x00h que vous cherchiez. Bonne explication de la différence que vous pouvez trouver ici: http://www.cplusplus.com/doc/tutorial/arrays/ et ici: http://www.cplusplus.com/doc/tutorial/ntcs/ – Dmitry

Questions connexes