Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей.
Здесь обсуждаются безопасность, программирование, технологии и многое другое.
Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz

09.03.2010, 14:10
|
|
Участник форума
Регистрация: 26.07.2008
Сообщений: 267
Провел на форуме: 1343031
Репутация:
184
|
|
Сообщение от Gifts
Для строк произвольной длинны - получился такой вот треш код:
PHP код:
$a = '79777F8084';
$b = '48454C4C4F';
function hex_sub($a,$b)
{
if (!function_exists('hex_sub_1')) {
function hex_sub_1($a,$b)
{
global $zaem;
$a = intval($a,16);
$b = intval($b,16);
if ($a < $b)
{
$out = $a - $b + 256 - $zaem;
$zaem = 1;
} else $out = $a - $b - $zaem;
return sprintf("%X", $out);
}
}
if (!is_string($a) or !is_string($b)) return false;
$out = '';
$zaem = 0;
$len = max(strlen($a),strlen($b));
$len = $len % 2 ? $len+1 : $len;
$a = str_split(str_pad($a, $len, '0', STR_PAD_LEFT), 2);
$b = str_split(str_pad($b, $len, '0', STR_PAD_LEFT), 2);
$a_part = end($a);
$b_part = end($b);
$out = hex_sub_1($a_part,$b_part);
while (($a_part = prev($a))!==false)
{
$b_part = prev($b);
$out = hex_sub_1($a_part,$b_part).$out;
}
return $out;
}
echo hex_sub($a,$b);
Спасибо, Gifts!
Да, у меня строки по 32 символа, можно еще попрошу, если есть время, посмотрите - правилньо ли я преобразовал функцию, чтобы она считала сумму, а не разность?
PHP код:
if (!function_exists('hex_add_1')) {
function hex_add_1($a,$b)
{
global $zaem;
$a = intval($a,16);
$b = intval($b,16);
if ($a+$b>255)
{
$out = $a + $b - 256 + $zaem; //bilo: $a - $b + 256 - $zaem;
$zaem = 1;
} else
{
$out = $a + $b + $zaem; //bilo: $a - $b - $zaem;
$zaem = 0; // ne bilo :)
}
return sprintf("%X", $out);
}
}
Сразу скажу, что вижу, что не пройдет обработка суммы чисел, вида FF + FF - т.е. "один в уме" в самом первом элементе массива - у меня такого не будет.
|
|
|
|
|
Здесь присутствуют: 2 (пользователей: 0 , гостей: 2)
|
|
|
|