ip转数字,ip地址转十进制 long类型,ip转十进制输出负数

最近在公司做一些解析ip的需求,把ip转成整型当作redis的key值是一个不错的选择。下面说一下ip地址怎么转整型的。

php语法

 

echo ip2long("220.181.1.2"); // 输出结果:-592117502

以上出现了负数,原因是ip地址较大,这里可以将其转成无符号格式。

 

echo sprintf("%u",ip2long($ipAdd)); //输出结果:3702849794   用sprintf %u 转化成无符号

ip2long是php自带的函数,她的转化原理很简单:

ip大家都知道是四段,每段范围是0-255,也就是四个0-255的数字用"."拼接起来的。

ip2long就是把每一段都写成二进制然后拼起来,注意这里转成二进制是要转成8位,不足8位补齐8位。例如:1就是00000001,5就是00000101,最大的255就是11111111,8位。再然后将拼起来的二进制转成十进制。

 

$ipAdd = "220.181.1.2";
$ipArr = explode(".",$ipAdd);
$ipStr = "";
for($i=0;$i<4;$i++){
    echo sprintf("%08d", decbin($ipArr[$i]))."
"; //这里循环输出:11011100 10110101 00000001 00000010 不足8位的用0补齐8位 $ipStr .=sprintf("%08d", decbin($ipArr[$i])); } echo $ipStr."
";//这里是拼接起来的结果:11011100101101010000000100000010 echo bindec($ipStr);//这里是二进制转成十进制的结果:3702849794

 

 

你可能感兴趣的:(ip转数字,ip地址转十进制 long类型,ip转十进制输出负数)