un éditeur hexa en php?

un éditeur hexa en php? - PHP - Programmation

Marsh Posté le 21-11-2004 à 22:28:50    

voila, j'aimerais programmer un éditeur hexadécimal entierement en PHP.
Je ne sais pas si c'est possible, mais déjà, en utilisant le code suivant:
 
$fichier = fopen("Ashe.mid","r" );
while (!feof($fichier)) {
    $buffer = fgets($fichier,255);
    echo $buffer;
}
 
j'ouvre le fichier "ashe.mid".
il me liste bien le contenu du fichier par paquet de 255.
j'ai essayé de changer 255 en 1, pour pouvoir effectivement voir chaque octets séparément, mais le programme plante plus ou moins à ce moment la.
si je pouvais convertir chaque octet en hexa, j'aurais déjà fais une bonne partie de ce que je veux faire.
 
quelqu'un voit comment faire?
suis je sur la bonne voie, ou alors je me plante completement?
est ce faisable?
Merci

Reply

Marsh Posté le 21-11-2004 à 22:28:50   

Reply

Marsh Posté le 22-11-2004 à 08:39:42    

J'ai déjà testé de faire un truc du genre mais j'ai rencontré des pb quand je devais manipuler des chars de 0x00 à 0x20 (ce qui est normal car de 0x00 à 0x20 c des codes qui peuvent être interprétés comme non caractères)...
 
Good luck (il doit exister une solution ;).
 
++
 
Fonzie

Reply

Marsh Posté le 22-11-2004 à 09:14:33    

man printf je pense (chépa si en php y'a sprintf, mais qu'importe)

Reply

Marsh Posté le 22-11-2004 à 14:32:27    

printf existe et fprintf aussi, ca pourrait résoudre mon probleme.

Reply

Marsh Posté le 23-11-2004 à 19:04:03    

bon pour ceux que ca intéresse, j'ai trouvé:
 
<?
  $handle = fopen("drop.png", "rb" );
  $i=0;
  echo "<textarea rows=10 cols=90>";
  while (!feof($handle)) {
      $buffer=fgets($handle,2);
      if ($i==30){
        $i=0;
        echo "\n";
      }
      $i++;
      echo bin2hex($buffer)."-";
  }
  echo "</textarea>";
  fclose($handle);
?>
 
Vous pouvez voir le résultat à l'adresse suivante:
 
http://superdeltree.free.fr/espaceclients/midi.php
 
mais un truc me pose problème:
 
      $buffer=fgets($handle,2);
 
logiquement cette instruction place 2 octets  provenant du fichier dans "$buffer" , et par la suite:
 
      echo bin2hex($buffer)."-";
 
est sensée afficher 2 octets consécutifs en hexadécimal, hors le résultat affiché me donne 1 octet (a moins que je me trompe? FF en hexa c est une seul octet, pas 2, si?)
de plus , si j'essaye avec l'instruction
 
      $buffer=fgets($handle,1);  
 
(je change 2 en 1 donc) il devrait m'afficher les octets 1 par 1 en hexa, mais en réalité ca plante si je fais ca.
 
Quelqu'un a une explication la dessus?
 
PS: le programme a l'air de déconner avec IE, il marche avec firefox, pouvez vous confirmer?


Message édité par deltree le 23-11-2004 à 21:07:18
Reply

Marsh Posté le 23-11-2004 à 21:01:12    

on remarque que le fichier commence par la séquence:
89 50 4E 47 0D 0A 1A 0A
 
et après vérification il s'agit bien de la séquence de départ d'un fichier de type png, donc le programme renvoie un résultat correct.

Reply

Marsh Posté le 24-11-2004 à 12:28:55    

bon, j'ai encore un probleme:
j'arrive bien a afficher le fichier en hexa, maintenant, j'aimerais stocker la version modifiée dans un fichier, et je ne sais pas comment faire.
 
J'ai une séquence d'octets en hexa genre ca:
 
89504e470d0a1a0a0000000d4948445
20000000b0000000d0803000000482b
64090000000467414d410000afc8370
58ae90000001974455874536f667477
6172650041646f626520496d61676 ....etc....
 
qui constitue mon fichier.
j'aimerais simplement stocker ces octets (que j'ai modifié) dans un autre fichier.
Evidement, ce n'est pas un fichier texte, ici, il s'agit d'un fichier .png. donc, il faut que ce soit stocké en binaire.
est ce que quelqu'un s'est déjà penché sur ce probleme, et comment faire?
J'ai essayé avec la fonction "pack" mais j'ai du mal a m'en servir et ca n'a pas l'air de marcher.


Message édité par deltree le 24-11-2004 à 12:34:16
Reply

Marsh Posté le 05-01-2005 à 18:46:54    

as-tu trouvé ??? passke j'ai exactement le même problème...

Reply

Sujets relatifs:

Leave a Replay

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