Neden PHP sağ shift negatif bir sayı çıkmıyor?

3 Cevap php

Ben bir bittorrent tracker sorgulamak çalışıyorum ve yanıtı IP'lerin listesini almak için paketten kullanıyorum. Yani, böyle bir şey:

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

Ben $ ip_add yazdırırken Ama, nedense, ben aşağıdaki IP adreslerini alıyorum:

117.254.136.66
121.219.20.250
-43.7.52.163

Herkes yanlış gidiyor ne olabilir biliyor mu?

3 Cevap

long2ip() ip geri numarasını dönüştürmek için kullanın

Zerkms dediği gibi, long2ip ne isterseniz onu yapar. Sorunuzu yanıtlamak için, >> is an arithmetic sağ shift ($i >> $j aritmetik ifade eşdeğerdir çünkü bu ismi i / 2j {[(5) ]} iff ($i >> $j) < 0. PHP logical shift yoktur (ama olabilir define your own).

Bu deneyin

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