Gestion de fichiers binaires

Résolu/Fermé
Firo- Messages postés 2 Date d'inscription jeudi 8 août 2013 Statut Membre Dernière intervention 12 août 2013 - Modifié par Firo- le 8/08/2013 à 13:59
Firo- Messages postés 2 Date d'inscription jeudi 8 août 2013 Statut Membre Dernière intervention 12 août 2013 - 12 août 2013 à 11:07
Bonjour
Il me faut un programme en c++ pour traiter des données binaires.
J'ai un editor Hexadecimal et un fichier de données binaires codées en Little Endian, alors que l'editeur et d'autres programmes l'ouvrent en Big Endian
J'ai donc fait un tableau 1 dimension du fichier.

Il est facile de passer de l'un vers l'autre avec un programme c++, enfin j'y parviens, seulement quand je réécris le fichier bin converti, j'ai un caractère parasite qui apparait tous les 1000 bits, c'est a dire tous les 125 bytes dans l'hex editor.
A savoir (0d) (qui correspond en ASCII a ' je crois).
En tout cas tous les 1000 bits j'ai un 0d qui s'insère et c'est très gênant, si bien que j'ai passé une journée a essayer de les supprimer.
Par exemple si les bytes 124,125 et 126 étaient :
DA D5 0A
J'obtiens :
DA 0D D5 0A


Mais j'ai remarqué que ces caractères n'existaient pas dans les données de mon tableau mais apparaissaient uniquement à l'écriture dans un fichier. J'utilise Visual Studio.
Ma question est : Pourquoi ils sont là ces 0d ?

Je joint un bout de mon programme, qui ouvre et réécrit simplement le fichier bin sans le modifier :

int main()
 {
 ifstream::pos_type size;
 char * data; //Mon tableau
 ifstream file ("Fichier.bin", ios::in|ios::binary|ios::ate); //Ouverture du fichier
 if (file.is_open())
 {
  int k=0;
  size = file.tellg(); //Taille du fichier pour definir le tableau
  data = new char [size]; //Tableau de la bonne taille
  file.seekg (0, ios::beg);
  file.read (data, size); //On lit le fichier du debut à la fin
  file.close(); //Tout le contenu est en mémoire, on ferme
  ofstream Nouveau;
  Nouveau.open ("Output.txt"); //On ouvre un nouveau fichier pour reecrire

  for (int i=0; i< (int) size; i++)
  {
   Nouveau<<data[i]; //On écrit, mais les 0d apparaissent
  }
  Nouveau.close(); 
  delete[] data;
 }
 else cout << "Open file : error"; //Si le fichier n'a pas été ouvert
 return 0;
 }


Voila merci beaucoup d'avance.
Firo
A voir également:

2 réponses

Bonjour
0D est un retour chariot il me semble, peut être qu'il est ajouté parce-que ton output.txt n'est pas ouvert en binaire.
1
Firo- Messages postés 2 Date d'inscription jeudi 8 août 2013 Statut Membre Dernière intervention 12 août 2013
12 août 2013 à 11:07
Bravo, c'était pas plus compliqué que ça !
J'ai remplacé la ligne :
Nouveau.open ("Output.txt");

par :
Nouveau.open ("Output.txt",ios::out|ios::binary|ios::ate);


Et le problème est parfaitement résolu.
1000 fois merci !
0