Astuce PHP : Écrire du binaire dans un fichier
Le 2006-08-29 17:32:04, par hpalpha, Membre émérite
Bonjour,
je souhaite ecrire un fichier en binaire avec php, seulement fwrite prend un string, or pour ecrire l'entier 104 dans mon fichier, il va m'écrire 104 en 3 octets ( 1 0 4 ) comme une chaine, alors que moi je veux sur 1 octet de valeur 104 --> D
en attendant je pourrais utiliser : fwrite($fichier,chr(104),1);
mais pour les entiers > 255 ????
et surtout pour les float ???
exemple de code :
je souhaite ecrire un fichier en binaire avec php, seulement fwrite prend un string, or pour ecrire l'entier 104 dans mon fichier, il va m'écrire 104 en 3 octets ( 1 0 4 ) comme une chaine, alors que moi je veux sur 1 octet de valeur 104 --> D
en attendant je pourrais utiliser : fwrite($fichier,chr(104),1);
mais pour les entiers > 255 ????
et surtout pour les float ???
exemple de code :
Code : |
1 2 3 4 5 6 7 8 | <? $fichier=fopen('out.tst', 'wb+'); fwrite($fichier,chr(0x02),1); $ff=-1.75440; fwrite($fichier,$ff,4); fwrite($fichier,chr(0x00),1); fclose ($fichier); ?> |
-
ePoXMembre éprouvéSalut,
C'est peut être une proposition bête... Mais bon n'ayant jamais fait de C le binaire tout sa ce n'est pas tasse thé :s
Bref peut être en utilisant sprintf avec l'option %b
tiré de http://www.php.net/manual/fr/function.sprintf.php :
Code : printf("%%b = '%b'\n", $n); // représentation binaire
bbyele 29/08/2006 à 22:10 -
TaumMembre éprouvéSalut,
Il faut utiliser pack() pour obtenir la représentation en chaine binaire.Code : 1
2
3
4
5
6
7
8
9
10
11
12$fichier = fopen('out.tst', 'wb+'); $b = pack("c", 0x02); // 0x02 comme char fwrite($fichier,$b); $ff=-1.75440; $b = pack("f", $ff); // $ff comme float fwrite($fichier,$b); fwrite($fichier, pack("c", 0x00)); // fonctionne bien sur également sans variable intermédiaire fclose ($fichier);
le 29/08/2006 à 22:35 -
hpalphaMembre émériteSuper merci, je connaissait pas, ca marche super bien.le 30/08/2006 à 10:22
-
hpalphaMembre éméritePour ceux que ca interresse, voici la premiere fonction en php d'export au format OV2 :
Code : 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<? /* Exportation d'une table bdd en format OV2 (Tomtom) (c) Damien Griessinger (HpAlpha) */ function packerligne($longitude,$latitude,$description) { return chr(0x02).pack("V",strlen($description)+14).pack("V",round($longitude*100000)).pack("V",round($latitude*100000)).$description.chr(0x00); } function db2ov2($nomfichier) { $fichier=fopen($nomfichier, 'wb+'); $db = pg_connect("host=$dbserveur dbname=$dbdatabase user=$dbuser password=$dbpass") or die('Error Connexion : ' . pg_last_error()); $resultat=pg_query("SELECT longitude,latitude,description FROM t_poi"); while($out=pg_fetch_array($resultat)){ fwrite($fichier,packerligne($out['longitude'],$out['latitude'],$out['description'])); } fclose ($fichier); pg_free_result($resultat); pg_close($db); } db2ov2('out.ov2'); ?>
le 10/09/2006 à 18:19 -
PIEPLUMembre régulierSuper ce code. Par contre, vous pouvez m'expliquer un peut cette ligne :
Code : return chr(0x02).pack("V",strlen($description)+14).pack("V",round($longitude*100000)).pack("V",round($latitude*100000)).$description.chr(0x00);
le 14/06/2008 à 19:08