|
pooronce
中级用户
积分 484
发帖 250
注册 2007-6-5
状态 离线
|
『第
16 楼』:
不错不错,这个算法精简多了
建议右边部分取9位,这样尽量减少算法使用的时间
|
|
2009-1-4 11:02 |
|
|
cz1314
初级用户
积分 64
发帖 43
注册 2007-11-12
状态 离线
|
『第
17 楼』:
看看这段如何??
@echo off&setlocal enabledelayedexpansion
set hex=0123456789ABCDEF
for /f "usebackq tokens=1,2*" %%i in ("ip.txt") do (
if not "%%i"=="" set var=&set h=&set s=%%i&call:lp
set/a ha=0x!var:~-8,2!,hb=0x!var:~-6,2!,hc=0x!var:~-4,2!,hd=0x!var:~-2,2!
set str1=!ha!.!hb!.!hc!.!hd!
if not "%%j"=="" set var=&set h=&set s=%%j&call:lp
set/a ha=0x!var:~-8,2!,hb=0x!var:~-6,2!,hc=0x!var:~-4,2!,hd=0x!var:~-2,2!
set str2=!ha!.!hb!.!hc!.!hd!
>>ip1.txt echo !str1! !str2! %%k
)
start "" "ip1.txt"
pause&goto :eof
:lp
set/a m=s/16,n=s%%16
set n=!hex:~%n%,1!
set h=%n%%h%
if %m% geq 16 set s=%m%&goto lp
set m=!hex:~%m%,1!
set var=0%m%%h%
看看 这样会不会 有什么问题呢?
[ Last edited by cz1314 on 2009-1-4 at 14:12 ]
|
|
2009-1-4 14:09 |
|
|
HAT
版主
积分 9023
发帖 5017
注册 2007-5-31
状态 离线
|
『第
18 楼』:
Re 17楼
有没有问题,你自己测试一下不就知道了么?
|
|
|
2009-1-4 14:48 |
|
|
linee
初级用户
积分 94
发帖 49
注册 2008-12-14
状态 离线
|
『第
19 楼』:
我也来练习一下,
@echo off
for /f "tokens=1,2,3" %%i in (test.txt) do call :conv %%i&call :conv %%j&echo %%k
goto :EOF
:conv
set/a ip=%1,ip1_=0
if %ip% lss 0 set/a ip=ip+2147483647+1,ip1_+=128
set/a ip1=ip/16777216,ip-=ip1*16777216,ip1+=ip1_
set/a ip2=ip/65536,ip-=ip2*65536
set/a ip3=ip/256,ip-=ip3*256
set /p =IP,%1 %ip1%.%ip2%.%ip3%.%ip% <nul
|
|
2009-1-5 14:47 |
|
|
netbenton
银牌会员
批处理编程迷
积分 1916
发帖 752
注册 2008-12-28 来自 广西
状态 离线
|
『第
20 楼』:
哇,厉害!
|
精简
[你的+我的+他的]=>[大家的] 个人网志 |
|
2009-1-6 02:07 |
|
|
terse
银牌会员
积分 2404
发帖 946
注册 2005-9-8
状态 离线
|
『第
21 楼』:
19楼上改进
@echo off&setlocal enabledelayedexpansion
cd.>ip1.txt
for /f "tokens=1,2,3" %%i in (ip.txt) do (
set n=0
call:lp %%i %%j
>>ip1.txt echo !str1! !str2! %%k
)
pause&goto :eof
:lp
set/a ip=%1,n+=1
if %ip% lss 0 (set/a ip-=2147483648,_ip=128)else set _ip=0
set/a ip1=ip/16777216,ip2=ip%%16777216/65536,ip3=ip%%65536/256,ip4=ip%%256,ip1+=_ip
set "str%n%=%ip1%.%ip2%.%ip3%.%ip4%"
if not "%2" == "" call:lp %2
|
简单!简单!再简单! |
|
2009-1-6 12:05 |
|
|
linee
初级用户
积分 94
发帖 49
注册 2008-12-14
状态 离线
|
|
2009-1-6 20:57 |
|
|
netbenton
银牌会员
批处理编程迷
积分 1916
发帖 752
注册 2008-12-28 来自 广西
状态 离线
|
『第
23 楼』:
22楼的应该是绝版了
偶学习了
[ Last edited by netbenton on 2009-1-7 at 02:54 ]
|
精简
[你的+我的+他的]=>[大家的] 个人网志 |
|
2009-1-7 02:53 |
|
|
cz1314
初级用户
积分 64
发帖 43
注册 2007-11-12
状态 离线
|
『第
24 楼』:
22 楼 好象没有输出大批文本啊。。。
|
|
2009-1-8 00:34 |
|
|
netbenton
银牌会员
批处理编程迷
积分 1916
发帖 752
注册 2008-12-28 来自 广西
状态 离线
|
『第
25 楼』:
根据22楼的稍作改动,这样就合要求了
@echo off
>IP_out.txt cd.
for /f "tokens=1,2,3" %%i in (ip.txt)do call:conv %%i&call:conv %%j&echo %%k >>IP_out.txt
type IP_out.txt
pause
goto:EOF
:conv
for %%i in (24 16 8 0)do set/a ip%%i=%1^>^>%%i^&255
set /p= %ip24%.%ip16%.%ip8%.%ip0% <nul >>IP_out.txt
[ Last edited by netbenton on 2009-1-8 at 01:12 ]
|
精简
[你的+我的+他的]=>[大家的] 个人网志 |
|
2009-1-8 01:06 |
|
|
scriptor
银牌会员
积分 1187
发帖 555
注册 2006-12-21
状态 离线
|
『第
26 楼』:
Quote: | Originally posted by netbenton at 2009-1-8 01:06:
@echo off
>IP_out.txt cd.
for /f "tokens=1,2,3" %%i in (ip.txt)do call:conv %%i&call:conv %%j&echo %%k >>IP_out.txt
type IP_out.txt
pause
goto:EOF
:conv
for %%i ... |
|
22# 25# 似乎都对超过4294967295 的数字不能转换了.
这是32bit机器上的上限.
|
|
2009-1-15 21:27 |
|
|
scriptor
银牌会员
积分 1187
发帖 555
注册 2006-12-21
状态 离线
|
『第
27 楼』:
并且, 对于超出范围的数据,比如:
50331648 1033418400 US
4000000001 50332671 US
3549476416 50332927 US
4000000000 50333695 US
4007483643 50333951 US
11111111111 11111111110 cn
2123369536 50334719 US
4294967295 4294967294 us
11111111111 11111111110 cn
输出结果会取用上一个有效数据的值.
|
|
2009-1-15 21:30 |
|
|
exzzz
初级用户
游手好闲 + 无所事事 ..
积分 194
发帖 167
注册 2007-4-30
状态 离线
|
『第
28 楼』:
牛人啊!顶一个,最近几天忙着培训,没时间来学习了,呵呵。
|
|
2009-1-15 22:31 |
|
|
netbenton
银牌会员
批处理编程迷
积分 1916
发帖 752
注册 2008-12-28 来自 广西
状态 离线
|
『第
29 楼』:
超过32位的可以分成两截来处理,如15楼的方法,
只是不知道超过32位的ip地址有什么用?
3.0.0.0 61.152.182.160 US
238.107.40.1 3.0.3.255 US
211.144.182.64 3.0.4.255 US
238.107.40.0 3.0.7.255 US
238.221.88.251 3.0.8.255 US
2.150.70.25.199 2.150.70.25.198 cn
126.144.12.64 3.0.11.255 US
255.255.255.255 255.255.255.254 us
2.150.70.25.199 2.150.70.25.198 cn
|
精简
[你的+我的+他的]=>[大家的] 个人网志 |
|
2009-1-16 00:30 |
|
|
cz1314
初级用户
积分 64
发帖 43
注册 2007-11-12
状态 离线
|
『第
30 楼』:
netbenton
非常感谢!也感谢所有老师的帮助!
|
|
2009-1-16 01:37 |
|