2 Stimmen

PHP zeigt eine Datei als Hex an?

Ich hatte vor einiger Zeit nach einer Möglichkeit gesucht, eine Datei als Hexadezimaldatei anzuzeigen und bin fündig geworden:

class Hex 
{ 

   var $file; 
   var $hex; 

   function __construct($file) 
   { 
      $this->file = $file; 
   } 

   function gethex() 
   { 
      $handle = fopen($this->file, 'r') or die('Permission?'); 

         while(!feof($handle)) 
         { 
            foreach(unpack('C*',fgets($handle)) as $dec) 
            { 
               $tmp = dechex($dec); 
               $this->hex[] .= strtoupper(str_repeat('0',2-strlen($tmp)).$tmp);    
            } 
         } 

      return join($this->hex); 
   } 

   function writehex($hexcode) 
   { 

      foreach(str_split($hexcode,2) as $hex) 
      { 
         $tmp .= pack('C*', hexdec($hex)); 
      } 

         $handle = fopen($this->file, 'w+') or die('Permission?'); 
         fwrite($handle, $tmp); 

   } 

} 

Bei einer Datei hat es gut funktioniert, aber ich glaube, ich habe Probleme, wenn ich es mit mehreren Dateien versuche. Stimmt etwas mit dem Skript nicht? Sollte es die Dateien irgendwo schließen? Sollte ich die Instanzen des Skripts löschen, nachdem ich sie benutzt habe?

Wäre das besser?

class Hex 
{ 

   var $file; 
   var $hex; 

   function __construct($file) 
   { 
      $this->file = $file; 
   } 

   function gethex() 
   { 
      $handle = fopen($this->file, 'r') or die('Permission?'); 

         while(!feof($handle)) 
         { 
            foreach(unpack('C*',fgets($handle)) as $dec) 
            { 
               $tmp = dechex($dec); 
               $this->hex[] .= strtoupper(str_repeat('0',2-strlen($tmp)).$tmp);    
            } 
         } 
      fclose($handle);
      return join($this->hex); 
   } 

   function writehex($hexcode) 
   { 

      foreach(str_split($hexcode,2) as $hex) 
      { 
         $tmp .= pack('C*', hexdec($hex)); 
      } 

         $handle = fopen($this->file, 'w+') or die('Permission?'); 
         fwrite($handle, $tmp); 
         fclose($handle);

   } 

}

6voto

user187291 Punkte 52315

Ich weiß nicht, wie Ihre Klasse funktioniert, aber um in Hex zu konvertieren, können Sie Folgendes verwenden

$hex = unpack("H*", file_get_contents($filename));
$hex = current($hex);

und einen Hexdump zurück in den Quellcode zu konvertieren:

$chars = pack("H*", $hex);

1voto

Ich sehe keine Probleme mit mehreren Dateien mit diesem Skript, aber es könnte ein Problem werden, wenn Sie die Datei nicht schließen. Am besten wäre es, die Datei vor dem Ende der Funktion/der Rückkehr zu schließen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X