设为首页收藏本站

91ROOT

 找回密码
 加入我们

QQ登录

只需一步,快速开始

搜索
热搜: udp
查看: 2052|回复: 1

[PHP] IP地址和十进制整形数字互转 [复制链接]

Rank: 9Rank: 9Rank: 9

发表于 2010-2-1 16:23:55 |显示全部楼层
IPV4 可以看做4个256进制的数字, 可以按常规的进制转换换算成十进制.

如 192.168.1.1 换算成10进制:

192*256*256*256 + 168*256*256+1*256+1

其实计算机更擅长移位和与或运算. 可以改进算法如下.

IP 转长整型
  1. function ipToInt($sIP)
  2. {
  3.         $aIP = explode('.',$sIP);
  4.         $iIP = ($aIP[0] << 24) | ($aIP[1] << 16) | ($aIP[2] << 8) | $aIP[3]
  5.         if($iIP < 0) $iIP += 4294967296;
  6.         return $iIP;
  7. }
复制代码
整型转 IP:
  1. function intToIP($iIP)
  2. {
  3.         $xor = array(0x000000ff,0x0000ff00,0x00ff0000,0xff000000);
  4.         for($i=0; $i<4; $i++)
  5.         {
  6.                 ${s.$i} = ($iIP & $xor[$i]) >> $i*8;
  7.                 if (${s.$i} < 0) ${s.$i} += 256;
  8.         }
  9.         return $s3.'.'.$s2.'.'.$s1.'.'.$s0;
  10. }
复制代码
如果不想对IP地址先做检验,可以使用下面的函数,缺陷只有一个就是不支持以0开头的IP位(特殊情况)
  1. <?php
  2. //$strIP  :   IP 字串
  3. //$lngIP  :   无符号IP
  4. if (($lngIP=ip2long($strIP)) < 0){ $lngIP += 4294967296 ;} // 对负数加上 2^32
  5. ?>
复制代码

Rank: 1

发表于 2010-5-28 11:46:56 |显示全部楼层
这样做保存数据很方便
没什么好说的。。。

使用道具 举报

您需要登录后才可以回帖 登录 | 加入我们

手机版|Archiver|91root技术区 ( 皖ICP备09028067号 )  

GMT+8, 2012-2-6 22:22 , Processed in 0.061833 second(s), 17 queries .

Powered by Discuz! X2

© 2001-2011 Comsenz Inc.

回顶部