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は算術式 と同等であるため、そのように名付けられました) です。つまり、iffです。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 に答える