Нашли или выдавили из себя код, который нельзя назвать нормальным,
на который без улыбки не взглянешь?
Не торопитесь его удалять или рефакторить, — запостите его на
говнокод.ру, посмеёмся вместе!
/**
* Конвертирует шестнадцатеричное число в десятичное
*
* @param string $hex шестнадцатиричное число
* @return string десятичное число
*/
private static function convertHexToBase10(string $hex): string
{
$base10result = 0;
foreach (str_split(trim($hex)) as $hexPart) {
$base10 = base_convert($hexPart, 16, 10);
$base10result = gmp_add(gmp_mul($base10result, 16), $base10);
}
return $base10result;
}
Задания для самопроверки:
1. Найдите ошибку в phpdoc.
2. Укажите функцию из стандартной поставки PHP, которая делает то же самое.
3. Дана строка, представляющая md5-хеш, то есть строковое представление 128-битного шестнадцатиричного числа. Напишите пример вызова функции из стандартной поставки PHP, возвращающую остаток от деления этого числа на 3, не используя функцию из предыдущего задания.
а че. мне уже даже интересно стало - на MD & SHA ключики как на числа посмотреться. о - и мак аддреса тоже. и даже IPv4/6 аддреса. а мы дураки с ними как массивами мучаемся - а их ведь можно в число просто сконвертить! красота среди бегущих!
IP адреса - это и есть числа, точки там разделяют байты (октеты) только для удобства человеков. А маска подсети - это на самом деле и есть битовая маска, при наложении (т.е. операция логического И) которой на ip получается та часть адреса, которая иденцифицирует подсеть.
Примерно так:
В стародавние времена админил я потихоньку в одной конторе, заодно и сайт говнокодил. При переезде админ провайдера выдал нам ip, маску (маска была очень узкая, там буквально пара бит оставалась на идентификатор узла) и адрес шлюза. Вбиваю - интернета нет, шлюз не пингуется. Накладываю маску на наш айпишник и на айпи шлюза, и обнаруживаю, что они с такой маской вообще не в одной подсети. Пришлось звонить провайдеру, долго и нудно объяснять, как работает маска подсети, админ не сразу допёр, в чём проблема.
Потому что число 128битное, а платформа не выдержит больше 64 бит. Но занимаются этим bcmapth и gmp, которые в стандартную поставку никак не входят, поэтому это ближайшее, что я знаю.
Примерно так:
В стародавние времена админил я потихоньку в одной конторе, заодно и сайт говнокодил. При переезде админ провайдера выдал нам ip, маску (маска была очень узкая, там буквально пара бит оставалась на идентификатор узла) и адрес шлюза. Вбиваю - интернета нет, шлюз не пингуется. Накладываю маску на наш айпишник и на айпи шлюза, и обнаруживаю, что они с такой маской вообще не в одной подсети. Пришлось звонить провайдеру, долго и нудно объяснять, как работает маска подсети, админ не сразу допёр, в чём проблема.
Вот такая админская версия говнокода.
Спасибо что рассказал нам про cidr, мы не знали
это плохой знак, что я это знаю, да?
http://php.net/manual/ru/function.hexdec.php
Почему, кстати?
Теперь полей ее расплавленной селитрой.
# * @return string десятичное число
# foreach(str_split(trim($hex)) as ...)
# $base10result = 0;
# return $base10result;
А вдруг str_split вернёт пустой итерируемый объект и функция вернёт 0 (int, а не string)?