Lecture d'un fichier binaire

Lecture d'un fichier binaire - PHP - Programmation

Marsh Posté le 26-02-2008 à 22:36:17    

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

Reply

Marsh Posté le 26-02-2008 à 22:36:17   

Reply

Marsh Posté le 27-02-2008 à 08:00:08    

johnson950 a écrit :

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


String ou suite d'octets, pas beaucoup de différence à la base

Reply

Marsh Posté le 27-02-2008 à 10:12:50    

Bonjour,
 
Effectivement il y a très peu de différence, cependant prenons par exemple une date que je dois récupérer sur 4 octets :
Lorsque je la récupère avec fgets($file,4), j'obtiens des symboles, il faut ensuite que je le convertisse mais comment faire ?
 
Merci

Reply

Marsh Posté le 27-02-2008 à 10:15:05    

Avec la fonction ord(), tu peux transformer un caractère en entier, ce sera peut-être déjà plus simple :)

Reply

Marsh Posté le 29-02-2008 à 09:53:29    

Bonjour,
 
Merci de vos réponses!
 
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!
La fonction "ord" ne retourne pas la valeur "ascii" du 1er caractère par hasard?
 
Merci de votre aide !


Message édité par johnson950 le 29-02-2008 à 09:57:50
Reply

Marsh Posté le 29-02-2008 à 10:06:27    

pour le premier problème, tu lis jusqu'à la valeur null
 
pour le 2ème problème tu récupères la valeur ascii de chaque octet avec ord et tu convertis

Reply

Marsh Posté le 29-02-2008 à 14:05:46    

Merci de votre réponse !
 
Alors concernant le 2e problème je l'ai résolu en utilisant un moyen différent car lors de la lecture 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


Message édité par johnson950 le 29-02-2008 à 14:09:50
Reply

Marsh Posté le 17-08-2009 à 13:34:51    

Bonjour,  
 
Réponse plus d'un an après (désolé) :  
Essayer avec les fonctions pack() et unpack() de PHP qui font ça très simplement !  
 
A+
Jacky

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed