91ROOT

 

 

91ROOT 文章 查看主题

IP地址和十进制整形数字互转

发布者: admin| 发布时间: 2010-2-1 16:23| 查看数: 579| 评论数: 1|帖子模式

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. ?>
复制代码

最新评论

点评 回复 引用 kogei 2010-5-28 11:46
这样做保存数据很方便
高级模式
B Color Image Link Quote Code Smilies
你需要登录后才可以回帖 登录 | 加入我们

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

GMT+8, 2010-9-6 19:54 , Processed in 0.015828 second(s), 11 queries .

Powered by Discuz! X1.5RC

© 2001-2010 Comsenz Inc.