<?php
class HexEditor
{
private $filename;
private $bin;
private $size;
public function __construct()
{
if(!isset($_POST["file"]))
{
$this->top();
$this->form();
$this->bottom();
}
else
{
$this->deleteFile();
$this->openFile();
$this->javascript();
$this->top();
$this->show();
$this->bottom();
}
}
private function deleteFile()
{
$files = glob('temp/*');
foreach($files as $file)
{
if(is_file($file))
{
unlink($file);
}
}
}
private function form()
{
print("<h3 style=\"margin-top:220px;\">file</h3>\n");
print("<form action=\"index.php\" method=\"post\" enctype=\"multipart/form-data\">\n");
print("Select file:\n");
print("<input type=\"file\" name=\"fileToUpload\" id=\"fileToUpload\">\n");
print("<input type=\"submit\" value=\"open\" name=\"file\">\n");
print("</form>\n");
}
private function javascript()
{
print("<script>\n");
print("var sel = 0;\n");
print("function pos(n)\n");
print("{\n");
print("\tdocument.getElementById('f_' + sel).style.backgroundColor = '#111';\n");
print("\tdocument.getElementById('g_' + sel).style.backgroundColor = '#111';\n");
print("\tsel = n;\n");
print("\tdocument.getElementById('f_' + sel).style.backgroundColor = '#05f';\n");
print("\tdocument.getElementById('g_' + sel).style.backgroundColor = '#05f';\n");
print("\tvar j1 = document.getElementById('f_' + n).value;\n");
print("\tvar j2 = document.getElementById('f_' + (n + 1)).value;\n");
print("\tvar j3 = document.getElementById('f_' + (n + 2)).value;\n");
print("\tvar j4 = document.getElementById('f_' + (n + 3)).value;\n");
print("\tvar k1 = parseInt('0x' + j1);\n");
print("\tvar k2 = parseInt('0x' + j2);\n");
print("\tvar k3 = parseInt('0x' + j3);\n");
print("\tvar k4 = parseInt('0x' + j4);\n");
print("\tdocument.getElementById('8bit').innerHTML = k1;\n");
print("\tdocument.getElementById('16bit').innerHTML = k2 * 256 + k1;\n");
print("\tdocument.getElementById('24bit').innerHTML = k3 * 65536 + k2 * 256 + k1;\n");
print("\tdocument.getElementById('32bit').innerHTML = k4 * 16777216 + k3 * 65536 + k2 * 256 + k1;\n");
print("}\n");
print("</script>\n");
}
private function top()
{
print("<html>\n");
print("<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\"/>\n");
print("<head>\n");
print("<style>\n");
print("body{font:15pt Courier New, Monospace; padding:0; margin:0; background-color:#111; color:#ccc;}\n");
print("input[type=text]{background-color:#111; color:#ccc;}\n");
print("input:focus{outline:none;}\n");
print(".field1{border:0; width:80px; text-align:center;}\n");
print(".field2{border:0; width:30px; text-align:center;}\n");
print(".field3{border:0; width:15px; text-align:center;}\n");
print(".top{font:12pt Arial, Helvetica, sans-serif;; width:100%; height:200px; position:fixed; top:0; left:0; background-color:#05f; color:#fff; padding:0 10px;}\n");
print(".main{margin-top:220px;}\n");
print(".loadPanel{background-color:#111; padding:20px;}\n");
print("</style>\n");
print("</head>\n");
print("<body onload=\"pos(0)\">\n");
print("<div class=\"top\">\n");
print("<h1>Hex Editor</h1>\n");
print("<div>file name: " . $this->filename . " (" . $this->size . " Bytes)</div>\n");
print("<div style=\"margin-top:10px\">\n");
print("<div>int__8-bit: <span id=\"8bit\">0</span></div>\n");
print("<div>int_16-bit: <span id=\"16bit\">0</span></div>\n");
print("<div>int_24-bit: <span id=\"24bit\">0</span></div>\n");
print("<div>int_32-bit: <span id=\"32bit\">0</span></div>\n");
print("</div>\n");
print("</div>\n");
}
private function bottom()
{
print("</body>\n");
print("</html>\n");
}
private function openFile()
{
$this->filename = "temp/" . basename($_FILES["fileToUpload"]["name"]);
if(move_uploaded_file($_FILES['fileToUpload']['tmp_name'], $this->filename))
{
$handle = fopen($this->filename, "rb");
$this->size = filesize($this->filename);
$this->bin = fread($handle, $this->size);
fclose($handle);
}
else
{
print("<div>file not found...</div>\n");
}
}
private function show()
{
print("<div class=\"main\">\n");
$len = strlen($this->bin);
for($i = 0; $i < strlen($this->bin); $i += 16)
{
$hex = dechex($i);
for($f = 0; $f = 8 - strlen($hex); $f++)
{
$hex = "0" . $hex;
}
print("<input class=\"field1\" type=\"text\" maxlength=\"8\" value=\"" . strtoupper($hex) . "\" readonly>\n");
for($g = 0; $g < 16; $g++)
{
$hex = "";
if($i + $g < $len)
{
$hex = dechex(ord($this->bin[$i + $g]));
}
if(strlen($hex) == 1){$hex = "0" . $hex;}
print("<input id=\"f_" . ($i + $g) . "\" class=\"field2\" type=\"text\" maxlength=\"2\" onfocus=\"pos(" . ($i + $g) . ")\" value=\"" . strtoupper($hex) . "\">");
}
for($g = 0; $g < 16; $g++)
{
if($i + $g < $len)
{
$k = $this->bin[$i + $g];
if(ord($k) < 32 || ord($k) > 126){$k = ".";}
print("<input id=\"g_" . ($i + $g) . "\" class=\"field3\" type=\"text\" onfocus=\"document.getElementById('f_" . ($i + $g) . "').focus();\" value=\"" . $k . "\" readonly>");
}
}
print("<br>");
}
print("</div>\n");
}
}
new HexEditor();
?>
Mi chiamo Cosimo Saccone e sono un programmatore napoletano di 44 anni con oltre 35 anni di esperienza nella programmazione (BASIC, Assembly). Realizzo progetti e programmi utilizzando i principali e più diffusi linguaggi (C, C++, PHP, Javascript, HTML) e software per la grafica (Photoshop, Illustrator, 3dsMax). Anche se la grafica rappresenta il mio principale settore di interesse, non disdegno il lavoro di back-end e di organizzazione dati e sono attento agli aspetti di efficienza e di risparmio delle risorse tipica della programmazione di basso livello (specie nel settore della grafica 3d). Realizzo siti internet, applicativi desktop e servizi di vario tipo. Ho una buona conoscenza della libreria OpenGL per lo sviluppo di applicazioni 3d interattive in C/C++. Cerco di adottare uno stile di programmazione fortemente ordinato e modulare. Possiedo, inoltre, una buona capacità di elaborazione della documentazione. Ho vari hobbies tra cui la pittura, la ginnastica e le lunghe passeggiate in solitudine.
Al fine di migliorare l’esperienza di navigazione sul nostro sito noi di cosimosaccone.com e i nostri partner selezionati elaboriamo i dati personali, compreso l’indirizzo IP e le pagine visitate, in relazione alla tua navigazione nei contenuti del sito, per i seguenti scopi:
Accesso alle informazioni
Dati precisi di geolocalizzazione
Misurazione del pubblico
Pubblicità e contenuti personalizzati
Ti ricordiamo che il termine cookie si riferisce a una porzione di dati inviati al tuo browser da un web server. Il cookie viene memorizzato sul tuo dispositivo e riconosciuto dal sito web che lo ha inviato in ogni navigazione successiva. Se vuoi saperne di più e compiere una scelta diversa, come il rifiuto del trattamento dei tuoi dati personali, clicca qui sulla nostra privacy policy. Potrai sempre modificare le tue scelte e impostare i singolo cookies selezionando il bottone qui sotto.
OK