如何计算两个IP之间的IP个数!
本帖最后由 6FINGERS 于 2010-1-26 10:51 编辑例如:
192.168.1.0
193.152.3.0
这两个IP地址之间存在多少个IP
最好是有个公式!:face (13): 不好意思,看走眼!希望版主帮转移一下! 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谁给加个花? 楼上的只能计算同数位的数字,比如都是4位..如果计算不同位的得进行改动..就是比较小的那个数的前面加0补足位数.. 刚发现个问题,ip的进制数好象是256。 改成256进制的 可别小看三楼的代码,还可以这样用,
msgbox(0,0,jianfa("6:30:42",@hour&":"&@min&":"&@sec,60,":")) 更新了一下,应该能算不同位数的减法了.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: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就是这个算法是不错的. 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
日了.
所以证明我的算法没有错的. 楼上的逻辑头脑应该在牛A与牛C之间! 金牌会员真是不一样!果然历害!
页:
[1]