1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100
| #include <fstream>
#include <stdio.h>
#include <stdlib.h>
#include <iostream>
#include <string>
#include <sstream>
#include <algorithm>
#include <cstring>
#include <vector>
using namespace std;
// METHODE POUR RECUPERER LA TAILLE DU FICHIER A TRAITER
long GetFileSize( std::ifstream & Fichier )
{
// sauvegarder la position courante
long pos = Fichier.tellg();
// se placer en fin de fichier
Fichier.seekg( 0 , std::ios_base::end );
// récupérer la nouvelle position = la taille du fichier
long size = Fichier.tellg() ;
// restaurer la position initiale du fichier
Fichier.seekg( pos, std::ios_base::beg ) ;
return size ;
}
int main(){
/////////////////////////////////////////////////////////////////////////////////////////////////////////
// CONVERSION HEXA //
/////////////////////////////////////////////////////////////////////////////////////////////////////////
ifstream fichier_analyse;
fichier_analyse.open("sony2in.rec"); //fichier de départ
int code;
char donnees;
if(!fichier_analyse) // test de la présence du fichier
{
cout<<"Erreur en ouvrant le fichier"<<endl;
}
//fichier une fois converti en hexa : hexa.txt
ofstream outfile ("hexa.txt");
while(!fichier_analyse.eof())
{
// on lit mot par mot
fichier_analyse>> donnees;
//conversion en hexadécimal
code = donnees; // on passe en décimal
std::ostringstream oss; // on génère un flux oss
oss << std::hex << code; // on précise une représentation hexa
std::string Hex = oss.str(); // oss est la représentation hexa du code
//cout << endl << oss.str() << " est la valeur ascii de : " << donnees << endl; //affichage de oss et de la valeur correspondante
//ecriture de la valeur hexa dans le fichier de sortie
outfile << oss.str();
}
outfile.close(); //fermeture du fichier de sortie
/////////////////////////////////////////////////////////////////////////////////////////////////////////
// ANALYSE FICHIER HEXA //
/////////////////////////////////////////////////////////////////////////////////////////////////////////
//balayage des valeurs du nouveau fichier
//ouverture du fichier hexa et mise en buffer des valeurs correspondantes
std::ostringstream ossBuffer;
std::ostringstream oss;
std::ifstream iFile( "hexa.txt" );
ossBuffer << iFile;
cout << "Taille du fichier : " << GetFileSize(iFile) << endl;
std::vector<std::string::size_type> Positions;
std::string Buffer = oss.str();
for (std::string::size_type Pos = Buffer.find("E14D"); Pos != std::string::npos; Pos = Buffer.find("E14D", Pos + 1))
{
Positions.push_back(Pos);
}
cout << Positions.back();
system("PAUSE"); //permet de ne pas fermer la fenetre violemment
return(0);
} |