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

Vous êtes nouveau sur Developpez.com ? Créez votre compte ou connectez-vous afin de pouvoir participer !

Vous devez avoir un compte Developpez.com et être connecté pour pouvoir participer aux discussions.

Vous n'avez pas encore de compte Developpez.com ? Créez-en un en quelques instants, c'est entièrement gratuit !

Si vous disposez déjà d'un compte et qu'il est bien activé, connectez-vous à l'aide du formulaire ci-dessous.

Identifiez-vous
Identifiant
Mot de passe
Mot de passe oublié ?
Créer un compte

L'inscription est gratuite et ne vous prendra que quelques instants !

Je m'inscris !

Astuce PHP : Écrire du binaire dans un fichier

Le , par hpalpha

0PARTAGES

1  0 
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 :
Code : Sélectionner tout
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);
?>

Une erreur dans cette actualité ? Signalez-nous-la !

Avatar de ePoX
Membre éprouvé https://www.developpez.com
Le 29/08/2006 à 22:10
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 : Sélectionner tout
printf("%%b = '%b'\n", $n); // représentation binaire
Bien sur il faudra utiliser sprintf pour obtenir une string et non un affichage sur la sortie standard.

bbye
0  0 
Avatar de Taum
Membre éprouvé https://www.developpez.com
Le 29/08/2006 à 22:35
Salut,

Il faut utiliser pack() pour obtenir la représentation en chaine binaire.

Code : Sélectionner tout
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);
0  0 
Avatar de hpalpha
Membre émérite https://www.developpez.com
Le 30/08/2006 à 10:22
Super merci, je connaissait pas, ca marche super bien.
0  0 
Avatar de hpalpha
Membre émérite https://www.developpez.com
Le 10/09/2006 à 18:19
Pour ceux que ca interresse, voici la premiere fonction en php d'export au format OV2 :

Code : Sélectionner tout
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');
?>
0  0 
Avatar de PIEPLU
Membre régulier https://www.developpez.com
Le 14/06/2008 à 19:08
Super ce code. Par contre, vous pouvez m'expliquer un peut cette ligne :

Code : Sélectionner tout
 return chr(0x02).pack("V",strlen($description)+14).pack("V",round($longitude*100000)).pack("V",round($latitude*100000)).$description.chr(0x00);
Merci
0  0