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);
}
}