6FINGERS 发表于 2010-1-25 18:44:26

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

本帖最后由 6FINGERS 于 2010-1-26 10:51 编辑

例如:
192.168.1.0
193.152.3.0
这两个IP地址之间存在多少个IP
最好是有个公式!:face (13):

6FINGERS 发表于 2010-1-25 19:03:19

不好意思,看走眼!希望版主帮转移一下!

sanmoking 发表于 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
        $txt += ( $a[$i] - $b[$i] ) * ( $o ^ ( $a - $i ) )       
Next       
Return $txt
EndFunc谁给加个花?

sanmoking 发表于 2010-1-25 20:33:07

楼上的只能计算同数位的数字,比如都是4位..如果计算不同位的得进行改动..就是比较小的那个数的前面加0补足位数..

sanmoking 发表于 2010-1-25 21:44:12

刚发现个问题,ip的进制数好象是256。

netegg 发表于 2010-1-26 04:47:16

改成256进制的

sanmoking 发表于 2010-1-26 08:43:50

可别小看三楼的代码,还可以这样用,
msgbox(0,0,jianfa("6:30:42",@hour&":"&@min&":"&@sec,60,":"))

sanmoking 发表于 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-$b)
        If $a < $b Then $p = "0"&$t&$p
        If $a > $b 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
        $txt += ( $a[$i] - $b[$i] ) * ( $o ^ ( $a - $i ) )       
Next       
Return $txt
EndFunc

sanmoking 发表于 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就是这个算法是不错的.

sanmoking 发表于 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
日了.
所以证明我的算法没有错的.

6FINGERS 发表于 2010-1-26 10:50:47

楼上的逻辑头脑应该在牛A与牛C之间!

hzxymkb 发表于 2010-1-26 10:58:58

金牌会员真是不一样!果然历害!
页: [1]
查看完整版本: 如何计算两个IP之间的IP个数!