中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net  论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

游客:  注册 | 登录 | 命令行 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » DOS批处理 & 脚本技术(批处理室) » [已结][超级感谢netbenton和其他老师的帮助]IP类型转换
作者:
标题: [已结][超级感谢netbenton和其他老师的帮助]IP类型转换 上一主题 | 下一主题
pooronce
中级用户





积分 484
发帖 250
注册 2007-6-5
状态 离线
『第 16 楼』:   使用 LLM 解释/回答一下

不错不错,这个算法精简多了
建议右边部分取9位,这样尽量减少算法使用的时间


2009-1-4 11:02
查看资料  发送邮件  发短消息  网志   编辑帖子  回复  引用回复
cz1314
初级用户





积分 64
发帖 43
注册 2007-11-12
状态 离线
『第 17 楼』:  看看这段如何?? 使用 LLM 解释/回答一下

@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楼 使用 LLM 解释/回答一下

有没有问题,你自己测试一下不就知道了么?




2009-1-4 14:48
查看资料  发短消息  网志   编辑帖子  回复  引用回复
linee
初级用户





积分 94
发帖 49
注册 2008-12-14
状态 离线
『第 19 楼』:   使用 LLM 解释/回答一下

我也来练习一下,
@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


   此帖被 +2 点积分    点击查看详情   
评分人:【 netbenton 分数: +2  时间:2009-1-6 02:07


2009-1-5 14:47
查看资料  发短消息  网志   编辑帖子  回复  引用回复
netbenton
银牌会员

批处理编程迷


积分 1916
发帖 752
注册 2008-12-28
来自 广西
状态 离线
『第 20 楼』:   使用 LLM 解释/回答一下

哇,厉害!




精简
=> 个人网志
2009-1-6 02:07
查看资料  发送邮件  发短消息  网志  OICQ (37659560)  编辑帖子  回复  引用回复
terse
银牌会员





积分 2404
发帖 946
注册 2005-9-8
状态 离线
『第 21 楼』:   使用 LLM 解释/回答一下

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


   此帖被 +2 点积分    点击查看详情   
评分人:【 netbenton 分数: +2  时间:2009-1-7 02:51




简单!简单!再简单!
2009-1-6 12:05
查看资料  发送邮件  发短消息  网志   编辑帖子  回复  引用回复
linee
初级用户





积分 94
发帖 49
注册 2008-12-14
状态 离线
『第 22 楼』:   使用 LLM 解释/回答一下

位移版,似乎更简单点
@echo off
for /f "tokens=1,2,3" %%i in (test.txt)do call:conv %%i&call:conv %%j&echo %%k
goto:EOF
:conv
for %%i in (24 16 8 0)do set/a ip%%i=%1^>^>%%i^&255
set /p=IP,%1 %ip24%.%ip16%.%ip8%.%ip0% <nul


Last edited by linee on 2009-1-6 at 21:06 ]


   此帖被 +17 点积分          点击查看详情   
评分人:【 netbenton 分数: +2  时间:2009-1-7 02:52
评分人:【 everest79 分数: +15  时间:2009-1-8 06:29


2009-1-6 20:57
查看资料  发短消息  网志   编辑帖子  回复  引用回复
netbenton
银牌会员

批处理编程迷


积分 1916
发帖 752
注册 2008-12-28
来自 广西
状态 离线
『第 23 楼』:   使用 LLM 解释/回答一下

22楼的应该是绝版了
偶学习了

Last edited by netbenton on 2009-1-7 at 02:54 ]




精简
=> 个人网志
2009-1-7 02:53
查看资料  发送邮件  发短消息  网志  OICQ (37659560)  编辑帖子  回复  引用回复
cz1314
初级用户





积分 64
发帖 43
注册 2007-11-12
状态 离线
『第 24 楼』:   使用 LLM 解释/回答一下

22 楼 好象没有输出大批文本啊。。。


2009-1-8 00:34
查看资料  发送邮件  发短消息  网志   编辑帖子  回复  引用回复
netbenton
银牌会员

批处理编程迷


积分 1916
发帖 752
注册 2008-12-28
来自 广西
状态 离线
『第 25 楼』:  根据22楼的稍作改动,这样就合要求了 使用 LLM 解释/回答一下

@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
查看资料  发送邮件  发短消息  网志  OICQ (37659560)  编辑帖子  回复  引用回复
scriptor
银牌会员




积分 1187
发帖 555
注册 2006-12-21
状态 离线
『第 26 楼』:   使用 LLM 解释/回答一下

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 楼』:   使用 LLM 解释/回答一下

并且, 对于超出范围的数据,比如:

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 楼』:   使用 LLM 解释/回答一下

牛人啊!顶一个,最近几天忙着培训,没时间来学习了,呵呵。


2009-1-15 22:31
查看资料  发送邮件  发短消息  网志   编辑帖子  回复  引用回复
netbenton
银牌会员

批处理编程迷


积分 1916
发帖 752
注册 2008-12-28
来自 广西
状态 离线
『第 29 楼』:   使用 LLM 解释/回答一下

超过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
查看资料  发送邮件  发短消息  网志  OICQ (37659560)  编辑帖子  回复  引用回复
cz1314
初级用户





积分 64
发帖 43
注册 2007-11-12
状态 离线
『第 30 楼』:   使用 LLM 解释/回答一下

netbenton


非常感谢!也感谢所有老师的帮助!


2009-1-16 01:37
查看资料  发送邮件  发短消息  网志   编辑帖子  回复  引用回复

请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: