Я пытаюсь запросить bittorrent средство отслеживания и использую, распаковывают для получения списка дюйм/с от ответа. Так, что-то вроде этого:
$ip = unpack("N", $peers);
$ip_add = ($ip[1]>>24) . "." . (($ip[1]&0x00FF0000)>>16) . "." . (($ip[1]&0x0000FF00)>>8) . "." . ($ip[1]&0x000000FF);
Но по некоторым причинам я получаю следующие IP-адреса, когда я печатаю $ip_add:
117.254.136.66
121.219.20.250
-43.7.52.163
Кто-либо знает то, что могло идти не так, как надо?
используйте long2ip () , чтобы преобразовать число обратно в ip
Как говорит zerkms, long2ip
делает то, что вы хотите. Чтобы ответить на ваш вопрос, >>
- это арифметический сдвиг вправо (названный так, потому что $ i >> $ j
эквивалентно арифметическому выражению i / 2 j
), который распространяет знаковый бит для сохранения знака числа. То есть $ i <0
iff ($ i >> $ j) <0
. PHP не имеет логического сдвига (но вы можете определить свой собственный ).