Необходимо (удвоить) (($ octet4 & amp; 255) & lt; & lt; 24) | (($ octet3 & amp; 255) & lt; & lt; 16) | (($ octet2 & amp; 255) & lt; & lt; 8) | ($ octet1 & amp; 255)?

В поисках эквивалента Little Endian для long2ip () и ip2long () я нашел этот очень полезный фрагмент кода от Брэндона Чекетта:
https://www.brandonchecketts.com/archives/php-conversion-between-and-ip-address-and-an-integer
и принял его в Little Endian, просто поменяв порядок октетов.
Для справки полный код ниже (на всякий случай, когда URL-адрес станет недействительным).

Теперь, учитывая дату публикации 24 апреля 2007 года своего поста, я просто хочу быть уверен:
Нужно ли еще приводить результат
(($octet1 & 255) << 24 ) | (($octet2 & 255) << 16 ) | (($octet3 & 255) << 8 ) | ($octet4 & 255 )
удвоить?
Я не думаю, что это необходимо, поскольку сегодня (PHP7) PHP_MAX_INT равен 9223372036854775807.
Поэтому я думаю, что будет безопасно, если я опущу оператор (double) в inet_aton (). Это правильно?
А также doubleval() а также sprintf("%u" ...) не должно быть больше необходимости в PHP7?

Вот полный код Брэндона для справки:

function inet_aton($ip_address)
{
if(! preg_match("/[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+$/",$ip_address)) {
return;
}
list($octet1, $octet2, $octet3, $octet4) = split('\.',$ip_address);

$ipaddress_number = (double)
(($octet1 & 255) << 24 ) |
(($octet2 & 255) << 16 ) |
(($octet3 & 255) << 8 ) |
($octet4 & 255 ) ;
## PHP doesn't support unsigned ints, so we "fake" it into returning a double
$return_number = doubleval(sprintf("%u", $ipaddress_number));
return $return_number;
}


function inet_ntoa($ip_number)
{
if(! is_numeric($ip_number)) {
return $ip_number;
}
## PHP doesn't support unsigned int's, so we'll use a double
$ip_number = doubleval($ip_number);
$octet1 = $ip_number >> 24 & 255;
$octet2 = $ip_number >> 16 & 255;
$octet3 = $ip_number >> 8 & 255;
$octet4 = $ip_number & 255;
$ip_address = $octet1 .'.'. $octet2 .'.'. $octet3 .'.'. $octet4 ;
return $ip_address;
}

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]