找回密码
 加入
搜索
查看: 3317|回复: 11

如何计算两个IP之间的IP个数!

  [复制链接]
发表于 2010-1-25 18:44:26 | 显示全部楼层 |阅读模式
本帖最后由 6FINGERS 于 2010-1-26 10:51 编辑

例如:
192.168.1.0
193.152.3.0
这两个IP地址之间存在多少个IP
最好是有个公式!
 楼主| 发表于 2010-1-25 19:03:19 | 显示全部楼层
不好意思,看走眼!希望版主帮转移一下!
发表于 2010-1-25 20:30:46 | 显示全部楼层
MsgBox(0,0,jianfa("12360","16580"))
MsgBox(0,0,jianfa("192.168.1.100","193.152.3.200",255, "."))

Func jianfa($x,$y,$o=10,$t="")
$a = StringSplit($x, $t)
$b = StringSplit($y, $t)
$txt = 0
For $i = 1 To $a[0]
        $txt += ( $a[$i] - $b[$i] ) * ( $o ^ ( $a[0] - $i ) )        
Next        
Return $txt
EndFunc
谁给加个花?

评分

参与人数 3威望 +2 金钱 +40 收起 理由
6FINGERS + 10 受益匪浅!看君一段代码,胜读十年书!
gapkiller + 10
afan + 2 + 20

查看全部评分

发表于 2010-1-25 20:33:07 | 显示全部楼层
楼上的只能计算同数位的数字,比如都是4位..如果计算不同位的得进行改动..就是比较小的那个数的前面加0补足位数..
发表于 2010-1-25 21:44:12 | 显示全部楼层
刚发现个问题,ip的进制数好象是256。
发表于 2010-1-26 04:47:16 | 显示全部楼层
改成256进制的
发表于 2010-1-26 08:43:50 | 显示全部楼层
可别小看三楼的代码,还可以这样用,
msgbox(0,0,jianfa("6:30:42",@hour&":"&@min&":"&@sec,60,":"))
发表于 2010-1-26 10:25:00 | 显示全部楼层
更新了一下,应该能算不同位数的减法了.
MsgBox(0,0,jianfa(12361,580))
MsgBox(0,0,jianfa(100,1005))
MsgBox(0,0,jianfa("192.168.3.200","192.168.2.0",256, "."))
MsgBox(0,0,jianfa("6:30:54","20:45:12",60, ":"))
MsgBox(0,"16进制计算,aaaaa-ffff的值",jianfa("10:10:10:10:10","16:16:16:16",16,":"))

Func jianfa($x,$y,$o=10,$t="")
$a = StringSplit($x, $t)
$b = StringSplit($y, $t)
$p = ""
$q = ""
For $i = 1 To Abs($a[0]-$b[0])
        If $a[0] < $b[0] Then $p = "0"&$t&$p
        If $a[0] > $b[0] Then $q = "0"&$t&$q
Next
$x=$p&$x
$y=$q&$y
$a = StringSplit($x, $t)
$b = StringSplit($y, $t)
$txt = 0
For $i = 1 To $a[0]
        $txt += ( $a[$i] - $b[$i] ) * ( $o ^ ( $a[0] - $i ) )        
Next        
Return $txt
EndFunc
发表于 2010-1-26 10:26:25 | 显示全部楼层
本帖最后由 sanmoking 于 2010-1-26 10:33 编辑

上面的算法貌似有点问题..得到的结果无法检验是否正确...10进制的正确,其他的不清楚.
似乎并不是单纯的进制减法,
比如
MsgBox(0,"16进制计算,fffff-ffff的值",jianfa("16:16:16:16:16","16:16:16:16",16,":"))
得到的值是1048576,转换成16进制是100000,靠,弄不懂了,如果直接是fffff-ffff的结果是f0000,转换成10进制是983040,
靠我也不知道上面的代码算出来的是什么结果.
不过算ip就是这个算法是不错的.
发表于 2010-1-26 10:40:16 | 显示全部楼层
MsgBox(0, 0, jianfa("192.168.3.200", "192.168.2.0", 256, "."))的结果就是456个ip,结果是正确的啊.
192.168.3.200-192.168.3.0=200
192.168.3.0-192.168.2.0=256
所以200+256=456,证明我的算法还是正确的.

再比如
MsgBox(0, 0, jianfa("6:30:10", "7:10:0", 60, ":"))的结果就是-2390秒,结果也是正确的啊.
6:30:10-6:31:00 = 50
6:31:00-7:00:00 =29*60 =1740
7:00:00-7:10:00=10*60 = 600
50+1740+600=2390
日了.
所以证明我的算法没有错的.
 楼主| 发表于 2010-1-26 10:50:47 | 显示全部楼层
楼上的逻辑头脑应该在牛A与牛C之间!
发表于 2010-1-26 10:58:58 | 显示全部楼层
金牌会员真是不一样!果然历害!
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-9-28 02:15 , Processed in 0.076565 second(s), 21 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表