background image

echo long2ip($ip_int);

输出:
021.110.11.49
292424497
17.110.11.49
转换结果都出错。以上例子都是因为加了前导

0 后导致转换结果出错,连带逆转结果与原转

ip 不匹配

转换原理
目前有两个算法:
第一、第一段乘以

256 的三次方,第二段乘以 256 的平方,第三段乘以 256、最后总和

代码如下
$ip = '0210.110.11.49';

function ipToInt($ip){
$iparr = explode('.',$ip);
$num = 0;
for($i=0;$i<count($iparr);$i++){
$num += intval($iparr[$i]) * pow(256,count($iparr)-($i+1));
}
return $num;
}

echo $ip.'<br />';
$ip_int = ipToInt($ip);
echo $ip_int.'<br />';
echo long2ip($ip_int);
 
输出:
0210.110.11.49
3530427185
210.110.11.49
第二、通过位运算符
代码如下
$ip = '0210.110.11.49';

function ipToInt($ip){
$iparr = explode('.',$ip);
return (intval($iparr[0]<<24))|(intval($iparr[1])<<16)|(intval($iparr[2])<<8)| (intval($iparr[3]));
}

echo $ip.'<br />';
$ip_int = ipToInt($ip);
echo $ip_int.'<br />';