PHP下十六位數值轉IP地址

jinqibingl發表於2015-02-13

PHP函式提供的long2ip和ip2long是IP和整形數值之間的轉換,沒有和十六位數值的轉換,所以寫下這個函式。


function ntoip($iphex)
{
    $len=strlen($iphex);//得到16進位制字串的長度
    if(strlen($iphex)<8)
    {
        $iphex='0'.$iphex;//如果長度小於8,在最前面加0
        $len=strlen($iphex); //重新得到16進位制字串的長度
    }
    //這是因為ipton函式得到的16進位制字串,如果第一位為0,在轉換成數字後,是不會顯示的
    //所以,如果長度小於8,肯定要把第一位的0加上去
    //為什麼一定是第一位的0呢,因為在ipton函式中,後面各段加的'0'都在中間,轉換成數字後,不會消失
    for($i=0,$j=0;$j     {//迴圈擷取16進位制字串,每次擷取2個長度
        $ippart=substr($iphex,$j,2);//得到每段IP所對應的16進位制數
        $fipart=substr($ippart,0,1);//擷取16進位制數的第一位
        if($fipart=='0')
        {//如果第一位為0,說明原數只有1位
            $ippart=substr($ippart,1,1);//將0擷取掉
        }
        $ip[]=hexdec($ippart);//將每段16進位制數轉換成對應的10進位制數,即IP各段的值
    }
    return implode('.', $ip);//連線各段,返回原IP值
}

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/9606200/viewspace-1435668/,如需轉載,請註明出處,否則將追究法律責任。

相關文章