PHP的ip2long和long2ip函数的实现原理
2014-06-27 17:37
471 查看
最近要做个十进制数字的可逆转换做邀请码,一直没搞清楚怎么弄的,实在太复杂了,今天弄IP时想到这个可以进行转换,于是研究了下原理:
主要是自己整理了下:
$ip = '12.34.56.78';
$ips = explode('.', $ip);
$result = 0;
$result += $ips[0]<<24;
$result += $ips[1]<<16;
$result += $ips[2]<<8;
$result += $ips[3];
echo bindec(decbin($result));
echo '<br>';
echo bindec(decbin(ip2long($ip)));
echo '<br>';
$str = '';
$str .= intval($result/intval(pow(2, 24))) .'.';
$str .= intval(($result&0x00FFFFFF)/intval(pow(2, 16))) .'.';
$str .= intval(($result&0x0000FFFF)/intval(pow(2, 8))) .'.';
$str .= intval($result&0x000000FF);
echo $str;
echo '<br>';
echo long2ip($result);
以上输出的结果为:
203569230
203569230
12.34.56.78
12.34.56.78
这只是实现的一种方法而已,还有其他的办法
我是想用类似的方法,可以直接把一个十进制数字转换为其他十进制数值并可逆,但遇到中间有很多0的数值时发现问题太多了,如 1000100
主要是自己整理了下:
$ip = '12.34.56.78';
$ips = explode('.', $ip);
$result = 0;
$result += $ips[0]<<24;
$result += $ips[1]<<16;
$result += $ips[2]<<8;
$result += $ips[3];
echo bindec(decbin($result));
echo '<br>';
echo bindec(decbin(ip2long($ip)));
echo '<br>';
$str = '';
$str .= intval($result/intval(pow(2, 24))) .'.';
$str .= intval(($result&0x00FFFFFF)/intval(pow(2, 16))) .'.';
$str .= intval(($result&0x0000FFFF)/intval(pow(2, 8))) .'.';
$str .= intval($result&0x000000FF);
echo $str;
echo '<br>';
echo long2ip($result);
以上输出的结果为:
203569230
203569230
12.34.56.78
12.34.56.78
这只是实现的一种方法而已,还有其他的办法
我是想用类似的方法,可以直接把一个十进制数字转换为其他十进制数值并可逆,但遇到中间有很多0的数值时发现问题太多了,如 1000100
相关文章推荐
- PHP的ip2long和long2ip函数的实现原理
- php 库函数ip2long实现
- PHP ip2long 算法实现
- php 库函数ip2long实现
- 修改Zend引擎实现PHP源码加密的原理及实践
- 用PHP实现标准的IP Whois查询
- 利用 QQWry.Dat 实现 IP 地址高效检索(PHP)
- PHP文件上传的原理及实现
- PHP中动态显示签名和ip原理
- PHP下ereg实现匹配ip的正则
- 用PHP实现标准的IP Whois查询
- 默默小谈PHP&MYSQL分页原理及实现
- PHP下ereg实现匹配ip的正则
- 小谈PHPMYSQL分页原理及实现
- AJAX聊天室实现原理 JQuery+PHP
- PHP&MYSQL分页原理及实现
- TCP/IP原理、基础以及在Linux上的实现
- 用PHP实现标准的IP Whois查询
- 利用 QQWry.Dat 实现 IP 地址高效检索(PHP)
- PHP中Session ID的实现原理