Однажды я упражнялся в алгоритмизации простой задачи на PHP. Вот результат (с небольшими доработками перед отправкой сюда).
/**
* Creates hex-dump of string variable
*
* @param string
* @param array
* @return string
*/
function strhex($string, $options=array())
{
static $defOptions = array(
'width' => 16,
'alt' => '.',
'skipHeader' => false,
);
$options = array_merge($defOptions, $options);
$string = (string)$string;
$options['width'] = min(32, max(8, $options['width']));
$w1 = $options['width'] - 1;
$len = strlen($string);
$result = $options['skipHeader']
? ''
: "Length: $len\n";
$dump = $orig = '';
for ($i = 0; $i < $len; $i++) {
$char = $string[$i];
$dump .= sprintf('%02x ', ord($char));
$orig .= ($char >= ' ') ? $char : $options['alt'];
if ($i && $i % $options['width'] == $w1) {
$result .= "$dump| $orig\n";
$dump = $orig = '';
}
}
if (strlen($orig)) {
$rem = str_repeat(' ', $options['width'] - strlen($orig));
$result .= $dump . str_repeat($rem, 3) . "| $orig$rem\n";
}
return $result;
}
/**
* Example
*/
$s = file_get_contents(__FILE__);
print strhex($s, array(
'width' => 16,
'skipHeader' => false,
));
Результат выглядит примерно так:
Length: 1274
3c 3f 0d 0a 0d 0a 2f 2a 2a 0d 0a 20 2a 20 43 72 | <?..../**.. * Cr
65 61 74 65 73 20 68 65 78 2d 64 75 6d 70 20 6f | eates hex-dump o
66 20 73 74 72 69 6e 67 20 76 61 72 69 61 62 6c | f string variabl
65 0d 0a 20 2a 0d 0a 20 2a 20 40 70 61 72 61 6d | e.. *.. * @param
20 20 73 74 72 69 6e 67 0d 0a 20 2a 20 40 70 61 | string.. * @pa
72 61 6d 20 20 61 72 72 61 79 0d 0a 20 2a 20 40 | ram array.. * @
72 65 74 75 72 6e 20 73 74 72 69 6e 67 0d 0a 20 | return string..
No comments:
Post a Comment