5

我正在尝试查询 bittorrent 跟踪器并使用 unpack 从响应中获取 IP 列表。所以,像这样:

$ip = unpack("N", $peers);
$ip_add = ($ip[1]>>24) . "." . (($ip[1]&0x00FF0000)>>16) . "." . (($ip[1]&0x0000FF00)>>8) . "." . ($ip[1]&0x000000FF);

但是,由于某种原因,当我打印 $ip_add 时,我得到了以下 IP 地址:

117.254.136.66
121.219.20.250
-43.7.52.163

有谁知道可能出了什么问题?

4

3 回答 3

10

使用long2ip()将数字转换回 ip

于 2010-04-16T04:07:03.543 回答
5

正如 zerkms 所说,long2ip做你想做的事。要回答您的问题,>>算术右移(之所以如此命名,是因为$i >> $j相当于算术表达式),它传播符号位以保留数字的符号。也就是说,。PHP 没有逻辑转换(但您可以定义自己的转换)。i / 2j$i < 0 ($i >> $j) < 0

于 2010-04-16T04:10:37.497 回答
1

试试这个

function decode_ip($str){
    $str = (float)($str);
    $ip = array(
        (int)($str/pow(2,24)),
        (int)($str/pow(2,16) & 0xFF),
        (int)($str/pow(2,8) & 0xFF),
        (int)($str & 0xFF)
    );
    return join(".", $ip);
}

decode_ip("3225422716"); //192.64.11.124

于 2013-08-16T22:44:01.127 回答