Page 1 sur 1

Écrire un fichier binaire

Posté : 22 févr. 2011, 08:44
par JFMass
Bonjour à tous,

Je gravi actuellement ma courbe de connaissance en programmation PHP et j'ai frappé un mur.

J'essaie de créer un script qui va convertir un fichier d'imagerie géoréférencée écrite en ASCII pour en faire un fichier binaire de format NIDS (nexrad level III) compatible avec les logiciels d'affichage de données radar météo de la NOAA.

Je sais comment isoler chaque valeur, cependant je en trouve pas comment insérer les chaînes de caractères hexadécimales dans mon fichier de sortie.

Dans le code qui suit, j'insère un code de produit dans ma variable $out qui en principe contient mes chaîne hexadécimale.

Code : Tout sélectionner

//Type produit $prod1 = pack("s", 37); //Toujours 37 $out = $prod1; //Date production $PD = $JD - 2440586; $PDP = pack("s",$PD); $out .= $PDP; echo $out;
Ici je ne sais pas si un echo est la bonne façon de vérifier cequi est inscrit dans ma variable. Le résultat est bel et bien une chaîne incompréhensible, sauf que quand j,ouvre un éditeur hexadécimal, je retrouve les chaînes FF FE 25 00 FD FF C2 00 3A 00 alors que j'attends comme résultat 00 25 3A C2 (37 en Int*2 et 15042 aussi en format Int*2). Je fais donc forcément quelques chose d'incorrect, mais quoi?


Merci de m'aider.

Re: Écrire un fichier binaire

Posté : 22 févr. 2011, 10:13
par xTG
Comment enregistres-tu dans ton fichier ?

Sinon pour correctement lire les données tu ferrais mieux de passer par printf(), similaire à la fonction en C elle te permettra de spécifier le type de donnée.

Re: Écrire un fichier binaire

Posté : 22 févr. 2011, 10:29
par JFMass
Je n'ai pas encore enregistré dans le fichier, je faisait un simple test pour m'assurer que les données étaient entrée comme je le voulais dans ma variable mais je vis utiliser fwrite.

Re: Écrire un fichier binaire

Posté : 22 févr. 2011, 10:39
par JFMass
J'ai modifié le code en utilisant printf et en copiant directement la sortie dans l'éditeur hexadécimal, j'obtiens 25 3F C2 3A au lieu de 00 25 3A C2

Re: Écrire un fichier binaire

Posté : 22 févr. 2011, 10:51
par Mazarini
Bonjour,

Peux tu essayer :
$prod = $prod1 = pack('S', 37);  // entier non signé ?
car d'après la doc :
s entier court signé (toujours sur 16 bits, ordre des bits dépendant de la machine)
S entier court non signé (toujours 16 bits, ordre des bits dépendant de la machine)
n entier cours non signé (toujours 16 bits, ordre des bits big endian)
v entier cours non signé (toujours 16 bits, ordre des bits little endian)
Au pire esssaye les 4.

Re: Écrire un fichier binaire

Posté : 22 févr. 2011, 10:55
par JFMass
Un gros Merci!

La bonne réponse était 'n'.

Seule chose qui me reste à faire est de trouver comment 'padder' mon 37 car PHP ne mets pas les 00 devant mon 25.

Encore merci.

Re: Écrire un fichier binaire

Posté : 22 févr. 2011, 11:21
par jojolapine
Bonjour,
str_pad() ? ;)

Re: Écrire un fichier binaire

Posté : 22 févr. 2011, 12:01
par Mazarini
Bonjour,

A priori, chr(0) peut te fournir le "00"