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

Langage PHP Discussion :

Lecture d'un fichier binaire


Sujet :

Langage PHP

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    256
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 256
    Points : 83
    Points
    83
    Par défaut Lecture d'un fichier binaire
    Bonjour,

    J'ai un petit problème en ce moment concernant la lecture d'un fichier binaire.
    Pour faire simple, le ficher est composé de 3 données :
    une taille sur 8 bits
    un numéro de série sur 20 bits
    une date sur 4 bits

    En VB, je faisais une structure ou je pouvais spécifier un type (sachant qu'en VB la date est codé sur 4 octets) ou bien un string * 21 octets.
    Je récupérais donc correctement mes informations mais en PHP je ne sais pas comment faire...

    J'ai bien essayé "fgets" mais les informations qui me reviennent sont uniquement des strings.

    Pourriez vous m'éclairer un peu !

    Je vous remercie par avance !
    Johnson

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    957
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 957
    Points : 1 177
    Points
    1 177
    Par défaut
    Peut-être pourrais tu convertir ton fichier en sa représentation hexa décimal.
    Jette un œil a la fonction bin2hex.

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    256
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 256
    Points : 83
    Points
    83
    Par défaut
    J'ai réussi à récupéré correctement les deux premiers champs.
    Cependant lorsque je récupère la date codé sur 4 bits je me retrouve avec des symboles.
    Savez vous comment on peut faire pour faire le cast et trouver le nombre correspondant ?

    Merci

  4. #4
    Membre éprouvé
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    957
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 957
    Points : 1 177
    Points
    1 177
    Par défaut
    la fonction bin2hex, te fourni une chaine de caractere qui est en faite une representation hexa-decimal de ton fichier donc tu devrais pouvoir t'en sortir avec cette fonction. fgets lit des octets pas des bits donc tu devras certainement faire des décalages de bit pour récupérer tes données.

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    256
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 256
    Points : 83
    Points
    83
    Par défaut
    Bonjour,

    Merci de ta réponse!

    J'utilise maintenant la fonction fread($handle,$n) (qui permet de lire "$n" octets dans un fichier)
    Je me retrouve maintenant avec une problématique :
    tous d'abord , je récupère 21 octets or mon identifiant possède parfois 5 caractères.
    Je me retrouve alors avec toto1........... (les "....." représentent des valeurs aléatoires) sachant que toto1 se termine par une valeur nulle.

    La seconde est de pouvoir convertir 2octets lus avec fread en nombre, je vais essayer avec la fonction bin2hex mais quelqu'un a peut être une autre idée ?

    Merci de votre aide !

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    256
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 256
    Points : 83
    Points
    83
    Par défaut
    Re bonjour !

    Alors concernant le 2e problème, comme je récupère d'abord le poids faible je fais donc :

    $nombre1 = bin2hex(fread($file,1)); //récupération du LSB
    $nombre2 = bin2hex(fread($file,1)); //récupération du MSB
    $nombre = hexdec ($nombre1.$nombre2); //On fait la conversion MSB.LSB

    Le code est peut être mal écrit qu'en pensez vous ?

    Ensuite pour la lecture jusqu'a la valeur NULL je vois pas trop comment faire car fread lit un nombre d'octets précis il ne s'arrête pas tous seul à la valeur null.

    Je vais me renseigner un peu sur les fonctions concernant les chaines de caractères mais si vous avez une idée je suis preneur !

    Merci encore de votre aide !

    Johnson

  7. #7
    Membre éprouvé
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    957
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 957
    Points : 1 177
    Points
    1 177
    Par défaut
    Si ton fichier est petit tu pourrais le lire en une seul fois.

Discussions similaires

  1. Réponses: 1
    Dernier message: 21/12/2006, 13h06
  2. lecture d'un fichier binaire
    Par booby dans le forum C
    Réponses: 17
    Dernier message: 20/09/2006, 16h11
  3. lecture d'un fichier binaire
    Par Tonta dans le forum C++
    Réponses: 1
    Dernier message: 14/04/2006, 06h53
  4. lecture d'un fichier binaire en VB
    Par olivier] dans le forum VB 6 et antérieur
    Réponses: 7
    Dernier message: 28/12/2005, 11h17
  5. Lecture d'un fichier binaire
    Par Gloubie dans le forum Langage
    Réponses: 9
    Dernier message: 05/12/2005, 12h51

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