Я пытаюсь запросить bittorrent трекер и использую распаковку, чтобы получить список IP-адресов из ответа. Так, что-то вроде этого:Почему сдвиг вправо в PHP возвращает отрицательное число?
$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
Кто-нибудь знает, что может быть неправильно?
Вы спаситель! Большое спасибо. Не может принять ответ в течение 10 минут после публикации:) В любом случае, не могли бы вы рассказать мне, что не так с моим методом? – Legend
вы должны добавить 2^31 в $ ip перед вычислениями ($ ip + pow (2, 31)) – zerkms
или $ ip & 0x7FFFFFFF; – zerkms