喜悦国际村 
» 游客:  注册 | 登录 | 搜索 | 统计 | 帮助

RSS 订阅当前论坛  

喜悦证交所已经关闭

上一主题 下一主题
 12  1/2  1  2  > 
     
标题: 求一个函数  
 
gun (gun)
注册会员
Rank: 2
初级会员



UID 23311
精华 0
积分 91
帖子 66
金钱 91 喜悦币
威望 0
人脉 0
阅读权限 20
注册 2003-9-19
状态 离线
求一个函数

已知2个IP,求出这两个IP之间的所有IP值.
例如:开始IP为10.0.0.1 结束ip为192.168.1.254那么这两个ip之间的所有ip为:
10.0.0.2
10.0.0.3
....
192.168.1.252
192.168.1.253

2006-7-26 09:17 AM#1
查看资料  发短消息  顶部
 
sanders_yao
版主
Rank: 7Rank: 7Rank: 7
or2 =333


UID 30286
精华 0
积分 11786
帖子 4970
金钱 11783 喜悦币
威望 0
人脉 3
阅读权限 100
注册 2004-7-23
来自 北京 菜户营
状态 离线
[推荐阅读] 一个女孩的生日礼物
虽然这样看不出有什么用 因为abc类的ip地址划分方式不同
楼主将ip换成32位二进制数再列出中间所有的 再转换为点分十进制的表现形式这样试试




最近写的一些代码都会在以下地址发布,有兴趣的来批:
http://www.phpx.com/happy/thread-131368-1-1.html
2006-7-26 09:34 AM#2
查看资料  Blog  发短消息  顶部
 
唠叨 (唠叨)
版主
Rank: 7Rank: 7Rank: 7
版主



UID 9955
精华 0
积分 1479
帖子 1546
金钱 1479 喜悦币
威望 0
人脉 0
阅读权限 100
注册 2001-10-27
状态 离线
[推荐阅读] 招聘php网站开发高级程序员(上海)
for($i=ip2long('10.0.0.1'); $i<=ip2long('192.168.1.254'); $i++) {
  echo long2ip($i).'<br>';
}
2006-7-26 09:38 AM#3
查看资料  Blog  发短消息  顶部
 
chinahtml
金牌会员
Rank: 6Rank: 6


UID 69683
精华 0
积分 1012
帖子 1019
金钱 1012 喜悦币
威望 0
人脉 0
阅读权限 70
注册 2006-3-16
状态 离线
[推荐阅读] 紧急求助!!!!
numip=int(arr(0))*16777216+int(arr(1))*65536+int(arr(2))*256+int(arr(3))-1

据说这个公式可以,,
依据如下.偶也不太明白咋回事.
218.25.202.115等,但这种IP地址也可这样表示,即将点分隔的4个十进制数转换为十六进制,然后去掉分隔的点,就成了一个8位的16进制数,再将这个8位的十六进制数转换为十进制数,最后就可得到一个十进制的大数。如前面的218.25.202.115,先转换为十六进制的DA.19.CA.73,去掉其中的点,得到8位的十六进制数DA19CA73,再将这个数转换为十进制的3659123315。这个过程可用公式来转换:218*256^3+25*256^2+202*256^1+115*256^0,即218*16777216+25*65536+202*256+115*1。人们在数据库中存储IP地址时,为减少存储的空间,提高数据库的执行效率,一般不会选择文本格式的点分隔形式,而会选择纯数字模式。




-地振山冈,一派溪山千古秀
-门朝大海,山合河水万年流
2006-7-26 09:44 AM#4
查看资料  发短消息  顶部
 
游戏人间
版主
Rank: 7Rank: 7Rank: 7
☞风云山庄大少爷☜


UID 62639
精华 2
积分 14665
帖子 7767
金钱 14515 喜悦币
威望 20
人脉 130
阅读权限 100
注册 2004-12-21
来自 广西人在北京
状态 在线
[推荐阅读] 寻找外包项目
楼上说的好XX哦,转来又转去,换得我头晕.



 
群号:6025396/6025252/19520091(广西PHP交流/PHP高级编程/算法交流) 寧可在嘗試中失敗,也不在保守中成功! 不為失敗找理由,只為成功找方法! 饿踢Blog
 
2006-7-26 09:50 AM#5
查看资料  访问主页  Blog  发短消息  顶部
 
chinahtml
金牌会员
Rank: 6Rank: 6


UID 69683
精华 0
积分 1012
帖子 1019
金钱 1012 喜悦币
威望 0
人脉 0
阅读权限 70
注册 2006-3-16
状态 离线
[推荐阅读] 问个大家一直困扰到我的问题
<?php
if (!function_exists("ip2long")) {
function ip2long($ip) {
  $ex = explode(".", $ip);
  if (count($ex)!=4) return -1;
  list($a, $b, $c, $d) = $ex;
  $a = $a*16777216;
  $b = $b*65536;
  $c = $c*256;
  return $a+$b+$c+$d;
}
}
echo (ip2long('10.0.0.1')-ip2long('192.168.1.254'));
?>




-地振山冈,一派溪山千古秀
-门朝大海,山合河水万年流
2006-7-26 09:55 AM#6
查看资料  发短消息  顶部
 
kuco
高级会员
Rank: 4
一半会员


UID 66126
精华 0
积分 964
帖子 964
金钱 909 喜悦币
威望 0
人脉 55
阅读权限 50
注册 2005-8-23
来自 上海
状态 离线
[推荐阅读] PHPDesigner2005
这个..这个....有用么??

适用于哪个地方???

告诉俺吧.^______^




阿里妈妈再掀疯狂采购风,急召天下站长,新加入站点3天内一定采购!
2006-7-26 10:03 AM#7
查看资料  Blog  发短消息  顶部
 
gun (gun)
注册会员
Rank: 2
初级会员



UID 23311
精华 0
积分 91
帖子 66
金钱 91 喜悦币
威望 0
人脉 0
阅读权限 20
注册 2003-9-19
状态 离线
[推荐阅读] The road to hell is paved with good intentions.
俺是想根据ip和子网掩码算出这个网段内可以使用的ip,现在只算出了开始ip和结束ip,中间一段不知道怎么样弄好才能算出来.
2006-7-26 10:12 AM#8
查看资料  发短消息  顶部
 
唠叨 (唠叨)
版主
Rank: 7Rank: 7Rank: 7
版主



UID 9955
精华 0
积分 1479
帖子 1546
金钱 1479 喜悦币
威望 0
人脉 0
阅读权限 100
注册 2001-10-27
状态 离线
[推荐阅读] 谁有md5 16位的函数


<?php
/**
 * 返回ip按指定掩码的网段地址
 * 参数
 * $ip ip地址,字符串
 * $mask 掩码,整型 掩码位数;字符串 ip格式的掩码,比如c类 255.255.0.0
 * 返回 网段地址
 **/
function sonnet($ip$mask=22) {
    
$ip preg_replace("/(^|.)0+(d+)/""$1$2"$ip);
    if(
long2ip(ip2long($ip)) != $ip) return '';
    if(
is_numeric($mask)) {
        
$mask bindec(str_pad(decbin(pow(2$mask)-1), 32'0'));
    }else {
        
$mask ip2long($mask);
    }
    return 
long2ip(ip2long($ip) & $mask);
}
?>
2006-7-26 10:56 AM#9
查看资料  Blog  发短消息  顶部
 
gun (gun)
注册会员
Rank: 2
初级会员



UID 23311
精华 0
积分 91
帖子 66
金钱 91 喜悦币
威望 0
人脉 0
阅读权限 20
注册 2003-9-19
状态 离线
[推荐阅读] 818.com 上海招聘PHP程序员
谢谢唠叨老大了.
俺用下面的代码勉强实现了俺要的功能.

<?php
//把32位二进制转换为数组
function strtoarray($data)
{
    
$a = array();
    
$len strlen($data)-1;
    for(
$i=$len$i>=0$i--)
    {
        
array_push($a,$data{$i});
    }
    return 
$a;
}
//二进制加一
function b_add($data) {
    
$s_a strtoarray($data);
    
$s_a[0]++;
    if(
$s_a[0]%== 0) {
        
$s_a[0] = 0;
        for(
$i=1;$i<32;$i++) {
            
$s_a[$i]++;
            if(
$s_a[$i]%2==0) {
                
$s_a[$i] = 0;
            }else{
                
$s_a[$i] = 1;
                break;
            }
        }
    }
    return 
strrev(implode("",$s_a));
}
$s    "10000000000000000000000000000100";
$e    "10000000000000000000000000100111";
while(
strcmp($s,$e)<0){
    
$s=b_add($s);
    
array_push($arr,$s);
}
print_r($arr);
?>
[ 本帖最后由 gun 于 2006-7-26 11:25 AM 编辑 ]
2006-7-26 11:22 AM#10
查看资料  发短消息  顶部
 12  1/2  1  2  > 
     


  可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题 | 开通个人空间  


 




Powered by Discuz! 6.1.0  © 2001-2010 Comsenz Inc.
Processed in 0.026672 second(s), 6 queries

(冀ICP备05009913号) 管理员:sadly 邮箱/MSN: sadly@phpx.com QQ:824008(长隐) 清除 Cookies - - Archiver - WAP