IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

Parsage d'un fichier binaire en php


Sujet :

PHP & Base de données

  1. #1
    Membre averti
    Homme Profil pro
    Immobilier
    Inscrit en
    Février 2017
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Immobilier

    Informations forums :
    Inscription : Février 2017
    Messages : 16
    Par défaut Parsage d'un fichier binaire en php
    Salut à tous je souhaite réaliser une classe pour parser un fichier binaire de 320 ko encodés en litte indian.

    Comme vous le savez un fichier binaire contient pour chacun des valeurs du fichier une adresse hexadecimale equivalente.

    J'ai besoin de recuperer certaines valeurs dans ce fichier en fonction de pattern de recherche.

    ( exemple je recherche la valeur hexadecimal se situant apràs une sequence de 5 valeurs hexadecimal tel que 11 70 17 28 23 ).

    je ne sais vraiment pas comment débuter étant donné que je n'ai trouvé aucun exemple concret. existe t'il seulement une fonction php pour faire ceci !!?

    Voici le debut de mon code

    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
    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
     
     
    Class GestionFichierBinaire {
     
    private $sFichierBin ='';
     
    static $aInfoBin = array();
     
     
    //constructeur
     
    function __construct ($sFichierBinaire){
     
    	$this->sFichierBin = $sFichierBinaire;
     
     
    	if ( TRUE === file_exists ($this->sFichierBin)){
     
    		$sExtFichier = new SplFileInfo ($this->sFichierBin);
     
    		if ($sExtFichier ->getExtension() !== '.bin'){
     
     
    			if ( '320 ' == round(filesize($this->sFichierBin)/1024)){
     
    				// on verifie maintenant l'encodage du fichier  mb detect encoding
    				if (
     
     
     
    			}
    			else{
    				throw new Exception ('Le fichier binaire '.$this->sFichierBin.' ne fait pas 320 ko. il fait '.round(filesize($this->sFichierBin)/1024));
    			}// fin du else
     
    		}
    		else{
    			throw new Exception ( 'Le fichier n\existe pas !');
    		}//fin du else 
    	}
     
    }// fin du constructeur
     
    }
    ?>
    premiere question je n'arrive pas à efffectuer une comparaison typée avec ce que me renvoit la fonction round(filsize()). ou est mon erreur

    deuxiemement : je souhaite utiliser la fonction mb detect encoding pour pouvoir detecter l'encodage de mon fichier.

    Si je regarde la description de cette fonction , celle-ci attend une chaine de caractere ?? ça ne serait pas vraiment un probleme mais un fichier hexadecimal n'est pas une chaine de caractere non ? et comment realiser la comparaison typée avec little endian ?

    merci

  2. #2
    Membre Expert
    Avatar de badaze
    Homme Profil pro
    Chef de projets info
    Inscrit en
    Septembre 2002
    Messages
    1 412
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets info
    Secteur : Transports

    Informations forums :
    Inscription : Septembre 2002
    Messages : 1 412
    Par défaut
    Pour la recherche et l'extraction de la donnée qui t'intéresse tu peux utiliser les expressions régulières (regexp).
    Peux tu poster une partie du contenu d'un fichier .bin car je ne comprends pas : un fichier binaire contient pour chacun des valeurs du fichier une adresse hexadecimale equivalente.

  3. #3
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 693
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 693
    Par défaut
    Pour lire un fichier binaire , il faut utiliser la fonction unpack qui te permet de spécifier quelle type de données tu attends.

    Tu as le détail des format possible ici : http://php.net/manual/fr/function.pack.php

    un exemple simple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $fp = fopen("fichierbinaire", "rb");     
    $data = fread($fp, 4);
    $entier= unpack("i", $data); // ici je récupère la valeur du int (i) contenu dans les 4 octets lus
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  4. #4
    Membre averti
    Homme Profil pro
    Immobilier
    Inscrit en
    Février 2017
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Immobilier

    Informations forums :
    Inscription : Février 2017
    Messages : 16
    Par défaut
    Pour badaze, voici un fichier exemple de bin

    Nom : FinFuelMap.png
Affichages : 2348
Taille : 68,1 Ko

    dans mon exemple je souhaite par exemple rechercher la valeur hexadecimal 26 qui correspond à l'adresse hexadecimal 0x4d6ef.

    j'aimerai donc recuperer dans un premier temps la valeur de cette adresse.

    Concernant ma recherche sur le littre endian, j'ai l'impression qu'en fait rien dans ce document ne me permettra de le verifier ( pas de meta pas de signes distinctifs). Il faut juste que je sache qu'il est encodé en little indian ( FSB et MSB). donc quand je decompacterai, il faudra que j'inverse en mettant le bit de point fort en premier soit en MSB comme l'homme aime le dire soit l'argument H dans la fonction unpack ("H) ...

    Merci grunk. J'avais compris cette exemple. Mais dans mon cas je souhaite lire à partir d'une valeur donnée. il me faudrait une fonction du genre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    $fp = fopen("fichierbinaire", "rb");     
    $data = fread($fp, 8,'mask' );                   // je veux lire les 8 octets après avoir trouvé la sequence defini par mon mask
    $entier= unpack("H", $data); // ici je récupère la valeur de la chaine hexadecimal (H) bit de poids fort en premier contenu dans les 8 octets lus

  5. #5
    Membre Expert
    Avatar de badaze
    Homme Profil pro
    Chef de projets info
    Inscrit en
    Septembre 2002
    Messages
    1 412
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets info
    Secteur : Transports

    Informations forums :
    Inscription : Septembre 2002
    Messages : 1 412
    Par défaut
    Je ne suis pas spécialiste de la question mais ces fichiers ne doivent être au final qu'un suite d'octets. Non ?
    Si oui alors peut être qu'une lecture de l'octet qui se trouve en Xème position suffit.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    $position = 10; // lit le 11ème caractère
     
    $fp = fopen('toto1.txt', 'r');
    fseek($fp, $position);
    $data = fgets($fp, 2);
     
    print ord($data)." - ".$data;

  6. #6
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 693
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 693
    Par défaut
    Cette valeur n'est jamais au même endroit dans le fichier ?
    Parce que si c'est le cas il suffit de lire le bon nombre d'octet à partir du bon endroit (fseek).

    Sinon peut être essayer de passer par bin2hex() pour avoir une représentation hexa du fichier et donc chercher la valeur précise de ce que tu veux
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  7. #7
    Membre averti
    Homme Profil pro
    Immobilier
    Inscrit en
    Février 2017
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Immobilier

    Informations forums :
    Inscription : Février 2017
    Messages : 16
    Par défaut
    tout à fait ce n'est jamais à la même position, position que je retrouve par le biais de ma sequence de valeurs hexadecimale qui pourrait definir un masque qui serait 11 70 17 28 23 d'après mon exemple de depart afin de rester concis.

    c'est toute la difficulté de ma recherche.

    Je veux à la fois récupérer l'adresse hexadecimal qui correspond à la valeur qui suit la sequence 11 70 17 28 23 qui sera de la forme 0x00000 mais également les valeurs.

    je vais essayer de faire une capture d'ecran afin d'illustrer mon propos

    en rouge mon masque de recherche soit 11 70 17 28 23
    en bleu la valeur hexadecimal recherchée et qui suit mon masque de recherche
    en vert l'adresse hexadecimal qui correspond à cette valeur hexadecimal

    Nom : ExplicationRechercheSection.png
Affichages : 2046
Taille : 93,5 Ko

  8. #8
    Membre Expert
    Avatar de badaze
    Homme Profil pro
    Chef de projets info
    Inscrit en
    Septembre 2002
    Messages
    1 412
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets info
    Secteur : Transports

    Informations forums :
    Inscription : Septembre 2002
    Messages : 1 412
    Par défaut
    Et comme ça ?

    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
    17
    18
    19
    20
    21
    22
     
    <?php 
    $string = file_get_contents('toto1.txt');
    $octets    = '666768'; // liste des octets à rechercher
     
    $pattern   = '~([0-9]{2})~';
    preg_match_all($pattern,$octets,$resultat);
     
    $recherche = "";
    foreach($resultat[0] as $value) {
    	$recherche .= chr($value);
    }
     
    $position  = strpos($string,$recherche);
    if ($position !== false) {
    	$pos2 = $position+strlen($recherche);
    	print "Position $pos2 => ";
    	print " ASCII => ".ord($string[$pos2]);
    	print " CHR => ".$string[$pos2];
    } else {
    	print "Pas trouvé";
    }

  9. #9
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 693
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 693
    Par défaut
    Tu peux pas faire une regex sur du binaire badaze , ses captures d'écran sont une représentation faites par un editeur hexadecimal.

    En revanche quelque chose comme ca pourrais peut être faire l'affaire :


    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
     
    $hexa = bin2hex(file_get_contents('file.bin'));
    $search = '1170172823'; // Chaine hexa à chercher
    $pos = strpos($hexa, $search); // Position du début de la chaine de recherche
     
    if($pos)
    {
        $val = substr($hexa,$pos+strlen($search),2);
     
        echo 'HEXA = '.$val .'<br />';
        echo 'DEC = '. hexdec($val);
    }
    else
    {
        echo $search.' pas trouvé';
    }
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  10. #10
    Membre Expert
    Avatar de badaze
    Homme Profil pro
    Chef de projets info
    Inscrit en
    Septembre 2002
    Messages
    1 412
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets info
    Secteur : Transports

    Informations forums :
    Inscription : Septembre 2002
    Messages : 1 412
    Par défaut
    La regexp sert à parser la chaîne qui correspond aux octets à rechercher pour ensuite convertir chaque paire en son caractère ASCII. J'avais oublié que c'était de l'hexadécimal (honte à moi) mais le principe est le même.

    Ensuite on recherche comme si c'était du texte. Exemple ! si je recherche 4E4F, je convertis en NO et je recherche NO dans la chaîne de caractère qui contient les données du fichier binaire.

    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
    17
    18
    19
    20
    21
     
    $octets    = '4E4F';
     
    $pattern   = '~([0-9A-F]{2})~';
    preg_match_all($pattern,$octets,$resultat);
     
    $recherche = "";
    foreach($resultat[0] as $value) {
    	$recherche .= chr(hexdec($value));
    }
     
    $position  = strpos($string,$recherche);
    if ($position !== false) {
    	$pos2 = $position+strlen($recherche);
    	print "Position $pos2 => ";
    	print " ASCII DEC=> ".ord($string[$pos2]);
    	print " ASCII HEX=> ".dechex(ord($string[$pos2]));	
    	print " CHR => ".$string[$pos2];
    } else {
    	print "Pas trouvé";
    }

  11. #11
    Membre averti
    Homme Profil pro
    Immobilier
    Inscrit en
    Février 2017
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Immobilier

    Informations forums :
    Inscription : Février 2017
    Messages : 16
    Par défaut
    Merci badaze

    Comme le dit Grunk, l'adresse hexadecimal qui correspond à la valeur est bien une vue du logiciel de lecture du fichier binaire.

    Le code est valide . cependant il ne me donne pas cette fameuse adresse hexadecimal correspondant à la valeur.

    et supposons que je veuille maintenant recuperer les 40 prochaines octets 2 octects par 2 octets.

    J'ai essayé une boucle for mais sans succès !

    EDIT je viens de voir que tu avais poster avant ma reponse BADAZE. je vais etudier ton commentaire

  12. #12
    Membre Expert
    Avatar de badaze
    Homme Profil pro
    Chef de projets info
    Inscrit en
    Septembre 2002
    Messages
    1 412
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets info
    Secteur : Transports

    Informations forums :
    Inscription : Septembre 2002
    Messages : 1 412
    Par défaut
    La position est donnée par la variable $pos2.

  13. #13
    Membre Expert
    Avatar de badaze
    Homme Profil pro
    Chef de projets info
    Inscrit en
    Septembre 2002
    Messages
    1 412
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets info
    Secteur : Transports

    Informations forums :
    Inscription : Septembre 2002
    Messages : 1 412
    Par défaut
    Je recherche 4E4F. L'octet qui suit à la valeur 50 et se trouve en position 19 en hexa soit 25 en décimal.

    Nom : 170210-001.JPG
Affichages : 1754
Taille : 26,9 Ko

    Nom : 170210-002.JPG
Affichages : 1721
Taille : 18,3 Ko

  14. #14
    Membre Expert
    Avatar de badaze
    Homme Profil pro
    Chef de projets info
    Inscrit en
    Septembre 2002
    Messages
    1 412
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets info
    Secteur : Transports

    Informations forums :
    Inscription : Septembre 2002
    Messages : 1 412
    Par défaut
    Citation Envoyé par LouisCh12 Voir le message

    et supposons que je veuille maintenant recuperer les 40 prochaines octets 2 octects par 2 octets.
    Si tu veux les n prochains octets ...

    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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
     
    $nombre_caractères = 6;
    $octets    = '4E4F';
     
    $pattern   = '~([0-9A-F]{2})~';
    preg_match_all($pattern,$octets,$resultat);
     
    $recherche = "";
    foreach($resultat[0] as $value) {
    	$recherche .= chr(hexdec($value));
    }
     
    $position  = strpos($string,$recherche);
    if ($position !== false) {
    	$pos2 = $position+strlen($recherche);
    	$str2 = substr($string,$pos2,$nombre_caractères);
    	$res2 = "";
    	for ($i=0;$i<strlen($str2);$i++) {
    		$res2 .= dechex(ord($str2[$i]));	
    	}
     
    	print "Position DEC $pos2 => ";
    	print "Caractères suivants HEX => $res2 ";
    } else {
    	print "Pas trouvé";
    }

  15. #15
    Membre averti
    Homme Profil pro
    Immobilier
    Inscrit en
    Février 2017
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Immobilier

    Informations forums :
    Inscription : Février 2017
    Messages : 16
    Par défaut
    par rapport à ta premiere proposition, je ne ferais qu'une modification

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
     
    $position  = strpos($string,$recherche);
    					if ($position !== false) {
    						$pos2 = $position+strlen($recherche);
    						echo 'Adresse Hexadecimal :  0x'.dechex($pos2).'<BR/>';  //je transforme la valeur decimal en hexadecimal qui correspond à l'adresse hexadecimal dans le fichier binaire
    						echo 'Valeur  HEX=>'.dechex(ord($string[$pos2])).'<BR />';	
    						echo 'Valeur  DEC=> '.ord($string[$pos2]).'<BR />';
     
     
     					}
    En effet, je recherche la valeur hexadecimal correspondant à la position que tu as bien trouvé.

    Peux tu m'expliciter d'ou apparait ce tableau $string[$pos2] ???

    pour le deuxieme extrait de code ça ne marche pas, je vais essayer de comprendre pourquoi. en fait il faudrait que la position bouge de deux octets à chaque lecture

    Pour finir peux tu me donner la signification du pattern ~([0-9A-F]{2})~ stp. j'ai beau me creuser la tête mais c'est trop pointu pour moi

  16. #16
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 693
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 693
    Par défaut
    Citation Envoyé par LouisCh12 Voir le message
    Merci badaze

    J'ai essayé une boucle for mais sans succès !
    Tu as essayer le bout de code que j'ai mis dans mon message précédent ?
    Idéalement faudrait nous donner ton fichier binaire et ce que tu cherches pour qu'on est une vision un peu plus claire.
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  17. #17
    Membre averti
    Homme Profil pro
    Immobilier
    Inscrit en
    Février 2017
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Immobilier

    Informations forums :
    Inscription : Février 2017
    Messages : 16
    Par défaut
    non j'ai essaye l'avant dernier dans lequel j'ai juste modifié par le code dans mon message précédent.

    Pour le fichier binaire, je peux le transmettre si tu veux. On a une vision de celui-ci juste un peu plus haut. ( voir message hier à 16h38)

    je recherche les valeurs suivantes et qui doivent m'arriver dans cet ordre


    DC 00
    04 01
    2C 01
    5E 01
    90 01
    F4 01
    58 02
    BC 02
    52 03
    E8 03
    B0 04
    DC 05
    6C 07
    60 09
    54 0B
    48 0D
    04 10
    EC 13
    00 19
    A4 1F

    et qui apparaissent dans mon fichier binaire.

  18. #18
    Membre Expert
    Avatar de badaze
    Homme Profil pro
    Chef de projets info
    Inscrit en
    Septembre 2002
    Messages
    1 412
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets info
    Secteur : Transports

    Informations forums :
    Inscription : Septembre 2002
    Messages : 1 412
    Par défaut
    Peux tu m'expliciter d'où apparaît ce tableau $string[$pos2] ??? : Une string n'est ni plus ni moins qu'un tableau de caractères.

    pour le deuxième extrait de code ça ne marche pas, je vais essayer de comprendre pourquoi. en fait il faudrait que la position bouge de deux octets à chaque lecture : Je n'ai pas ce comportement chez moi. Mais bon je n'ai qu'un petit fichier.

    Pour finir peux tu me donner la signification du pattern ~([0-9A-F]{2})~ stp. j'ai beau me creuser la tête mais c'est trop pointu pour moi : Cela signifie extraire les paires {2} de caractères composés chacun d'un caractère qui peut aller de 0 à 9 et de A à F [0-9A-F] . Les parenthèses servent à capturer les données et à les mettre dans le tableau $resultat.

  19. #19
    Membre Expert
    Avatar de badaze
    Homme Profil pro
    Chef de projets info
    Inscrit en
    Septembre 2002
    Messages
    1 412
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets info
    Secteur : Transports

    Informations forums :
    Inscription : Septembre 2002
    Messages : 1 412
    Par défaut
    Fichier exe de 600 Ko. Recherche des octets sur fond bleu donne les 6 octets sur fond jaune

    Pièce jointe 243402

    Les octets trouvés ainsi que la position sont corrects.

    Pièce jointe 243399



    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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
     
    <?php 
    $string = file_get_contents('SSDTSetup.exe');
     
    $nombre_caractères = 6;
    $octets    = '3DB197A43A0A7550A883DD052112F1';
     
    $pattern   = '~([0-9A-F]{2})~';
    preg_match_all($pattern,$octets,$resultat);
     
    $recherche = "";
    foreach($resultat[0] as $value) {
    	$recherche .= chr(hexdec($value));
    }
     
    $position  = strpos($string,$recherche);
    if ($position !== false) {
    	$pos2 = $position+strlen($recherche);
    	$str2 = substr($string,$pos2,$nombre_caractères);
    	$res2 = "";
    	for ($i=0;$i<strlen($str2);$i++) {
    		$res2 .= strtoupper(dechex(ord($str2[$i])));	
    	}
     
    	print "Position DEC $pos2 ";
    	print "Position HEX ".strtoupper(dechex($pos2));;	
    	print "<br/>Caractères suivants HEX => $res2 ";
    } else {
    	print "Pas trouvé";
    }

  20. #20
    Membre averti
    Homme Profil pro
    Immobilier
    Inscrit en
    Février 2017
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Immobilier

    Informations forums :
    Inscription : Février 2017
    Messages : 16
    Par défaut
    voici le rendu visuel

    Nom : RenduVisuel.png
Affichages : 1852
Taille : 149,1 Ko

    et qui correspond au code suivant :

    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
     
     
    $position  = strpos($string,$recherche);
    					if ($position !== false) {
    						$pos2 = $position+strlen($recherche);
    						echo 'Adresse Hexadecimal :  0x'.dechex($pos2).'<BR/>';  //je transforme la valeur decimal en hexadecimal qui correspond à l'adresse hexadecimal dans le fichier binaire
    						echo 'Valeur  HEX=>'.dechex(ord($string[$pos2])).'<BR />';	
    						echo 'Valeur  DEC=> '.ord($string[$pos2]).'<BR />';
     
     
    						$str2 = substr($string,$pos2,40);
    						$res2 = "";
    						for ($i=0;$i<strlen($str2);$i++) {
    							$res2 .= dechex(ord($str2[$i]));	
    							echo $res2.'<BR />';
    						}
    donc en gros le probleme est que je relis à partir de la position de depart

Discussions similaires

  1. Initialiser un fichier binaire en php
    Par zyzzx dans le forum Langage
    Réponses: 2
    Dernier message: 06/08/2012, 13h36
  2. [LG]ecriture dans un fichier binaire
    Par jsaviola dans le forum Langage
    Réponses: 3
    Dernier message: 26/12/2003, 17h30
  3. [Debutant] Comment lire la taille d'un fichier binaire ?
    Par Invité dans le forum Entrée/Sortie
    Réponses: 4
    Dernier message: 18/12/2003, 19h20
  4. communication fichier binaire fichier txt
    Par micdie dans le forum C
    Réponses: 3
    Dernier message: 05/12/2002, 00h19
  5. fichier binaire ou texte
    Par soussou dans le forum C++Builder
    Réponses: 4
    Dernier message: 14/06/2002, 13h39

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo