J'ai besoin de lire et d'écrire des données binaires en C ++. J'utilise à partir de ofstream code> et ifstream code> classes, mais il ne peut pas lire des caractères de 9,13,32. Si existe-t-il une autre façon de lire et d'écrire un thème. P>
3 Réponses :
Ouvrez le fichier à l'aide du drapeau Il y a quelques exemples ici: P>
http://www.cplusplus.com/reference/iostream/istreceam/read / p>
http://www.cplusplus.com/reference/iostream/ostream/write / p> STD :: iOS :: binaire code> Binary Utilisez ensuite lisez code> et écrire code> plutôt que les opérateurs de streaming. < / p>
@mehdi, il vous a donné une documentation et des exemples. Que veux-tu de plus?
Regardez l'exemple dans le premier lien. Il ouvrira un fichier, lisez le contenu et mettra le contenu dans un tampon de charme. Le tampon sera traité comme une gamme d'octets essentiellement. Exactement, qu'est-ce que vous avez besoin de plus d'explication de? Comment gérer le tampon et prendre des valeurs de celui-ci?
Voici un programme qui fait:
$ echo -ne '\x9\xd\x20\x9\xd\x20\n' >binfile $ ./readbin binfile Read a 9 Read a 13 Read a 32 Read a 9 Read a 13 Read a 32 Read a 10
Résolution de l'espace de noms paranoïaque! :-)
@Kerrek SB: Pourquoi, oui, voir Stackoverflow.com/Questtions/1661912/... Grand Grin i>
Cela fonctionne, mais est très inefficace si le fichier est grand. Pour une meilleure performance, utilisez la méthode Stuard Golodetz. Pour une meilleure performance, utilisez STD :: Streambuf.
@ user763305: Eh bien, oui, ça n'effectue pas tout ça. Mais l'OP ne semblait pas avoir envie de nuances. Et l'autre réponse a simplement des liens vers la documentation. Il n'y a donc pas de méthode, juste une indication sur la manière dont vous pourriez le faire. :-)
Ceci est un exemple de base (sans vérification d'erreur!):
// Required STL
#include <fstream>
using namespace std;
// Just a class example
class Data
{
int a;
double b;
};
// Create some variables as examples
Data x;
Data *y = new Data[10];
// Open the file in input/output
fstream myFile( "data.bin", ios::in | ios::out | ios::binary );
// Write at the beginning of the binary file
myFile.seekp(0);
myFile.write( (char*)&x, sizeof (Data) );
...
// Assume that we want read 10 Data since the beginning
// of the binary file:
myFile.seekg( 0 );
myFile.read( (char*)y, sizeof (Data) * 10 );
// Remember to close the file
myFile.close( );
Aucun compilateur compatible des normes ne construira ce fichier. std :: code> b> FRStream code> est dans .h code>).
Suggestions appliquées. Désolé pour le retard! Pourquoi @johnsyweb n'a-t-il pas modifié mon code?
S'il vous plaît montrer votre code. Avez-vous défini
std :: ifstream :: binaire code> dans le champ en mode ouvert?Veuillez afficher un extrait de code, la sortie que vous attendez et la sortie que vous avez reçue.
Veuillez vous reporter à Stackoverflow.com/cetions / 5355163 / ...
La méthode que je donne dans mes travaux de réponse, mais elle effectue relativement peu. Je suggérerais de lire les références L'autre réponse donnait parce que les fonctions mentionnées ont effectivement performer beaucoup plus rapidement, bien qu'ils soient un peu plus complexes de manière conceptuelle.