中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --
联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟
中国DOS联盟论坛
现在时间是 2026-09-17 12:32
47,812 主题排行 / 349,917 发帖 / 今日 0 篇 / 48,270 会员排行
DOS批处理 & 脚本技术(批处理室) » [求助]ip类型转换问题:如何把点分十进制IP转换为数字型
可打印版本  1,430 / 7
第1楼 gotocmd 发表于 2009-01-16 14:10
新手上路 发帖 20 积分 19
[求助]ip类型转换问题:如何把点分十进制IP转换为数字型
关于数字型转十进制ip在这里已经得到解决:
http://cn-dos.net/forum/viewthread.php?tid=45528&fpage=1

但反过来,如何把十进制ip转数字型ip呢?

───────────────── 版务记录 ─────────────────
执行:HAT
操作:在帖子标题中增加搜索关键字
说明:原标题"ip类型转换问题"不利于论坛搜索
处罚:论坛新人免于积分处罚
提示:建议阅读以下帖子
{1415}提问的智慧
{7326}论坛新手必读,所有人的基本行为准则
{22703}请不要做浮躁的人
{32667}那些连标题都写不清楚的人们啊,你们醒醒吧
{32825}本版严厉整顿烂帖
───────────────── 版务记录 ─────────────────


[ Last edited by HAT on 2009-1-16 at 15:39 ]
第2楼 slore 发表于 2009-01-16 14:36
铂金会员 发帖 2,478 积分 5,212
第一为大于128计算出来数是负数=。=算法看懂就好
@echo on
for /f "delims=." %%a in ("223.255.255.255") do (
Call :GetDIP %%a %%b %%c %%d
)
pause
exit

:GetDIP
set /a dip=%1*256*256*256
set /a dip=%dip%+%2*256*256
set /a dip=%dip%+%3*256
set /a dip+=%4
echo %dip%
第3楼 slore 发表于 2009-01-16 14:39
铂金会员 发帖 2,478 积分 5,212
数字表示范围不知道CMD有简单的方法没。

下面是个VBS的:
IP = "223.255.255.255"
dip = Split(IP,".")
outip = dip(0) * 256 * 256 * 256
outip = outip + dip(1) * 256 * 256
outip = outip + dip(2) * 256
outip = outip + dip(3)
MsgBox outip
第4楼 gotocmd 发表于 2009-01-16 15:11
新手上路 发帖 20 积分 19
谢谢slore兄,这只是对某一ip的转换,都怪我没说清楚
是这样的,我通过“ShowIp.exe"(纯真ip数据库工具)得到文本文件ip.txt,内容格式如下:
0.0.0.0 0.255.255.255 IANA CZ88.NET
1.0.0.0 1.51.255.255 IANA CZ88.NET
1.52.0.0 1.52.255.255 美国 CZ88.NET
1.53.0.0 1.153.255.255 IANA CZ88.NET
1.154.0.0 1.154.255.255 美国 CZ88.NET
1.155.0.0 1.255.255.255 IANA CZ88.NET
2.0.0.0 2.255.255.255 IANA CZ88.NET
3.0.0.0 3.255.255.255 美国 新泽西通用电气公司
4.0.0.0 4.9.255.255 美国 CZ88.NET
4.10.0.0 4.10.255.255 美国 新泽西州立大学
......

怎样得到文件ip_out.txt内容格式如同:
0 16777215 IANA CZ88.NET
16777216 33554431 IANA CZ88.NET
33554432 50331647 美国 CZ88.NET
........
第5楼 gotocmd 发表于 2009-01-17 12:54
新手上路 发帖 20 积分 19
自己顶
等待高手解决....
第6楼 netbenton 发表于 2009-01-20 14:43
银牌会员 发帖 752 积分 1,916 来自 广西
@echo off&setlocal enabledelayedexpansion
for /f "tokens=1-8,* delims= . " %%a in ('type ip.txt') do (
Call :GetDIP %%a %%b %%c %%d one
Call :GetDIP %%e %%f %%g %%h tow
echo !one! !tow! %%i
)
pause
goto :eof

:GetDIP
set /a sur=%2*256*256+%3*256+%4

if %1 gtr 127 (
set/a fr=%1-128
set /a sur=!fr!*256*256*256+!sur!
set sur=000000000!sur!
set sur=!sur:~-10!
set /a su2=1!sur:~-8!-100000000+47483648
set su2=000000000!su2!
set su2=!su2:~-10!
set /a su1=1!sur:~0,-8!-100+21+!su2:~0,-8!
set "sur=!su1!!su2:~-8!"
) else (
set /a sur=%1*256*256*256+!sur!
)

set "%5=!sur!"
goto :eof
第7楼 slore 发表于 2009-01-20 14:51
铂金会员 发帖 2,478 积分 5,212
=.=

果然128以后很麻烦的说~
第8楼 netbenton 发表于 2009-01-21 14:02
银牌会员 发帖 752 积分 1,916 来自 广西
改进一下
改进排版,和精简了代码

@echo off&setlocal enabledelayedexpansion
for /f "tokens=1-8,* delims= . " %%a in ('type ip.txt') do (
Call :GetDIP %%a %%b %%c %%d one
Call :GetDIP %%e %%f %%g %%h tow
if "!one:~4,1!"=="" set/p "= "<nul
echo !one! !tow! %%i
)
pause
goto :eof

:GetDIP
set /a sur=%2*256*256+%3*256+%4

if %1 gtr 127 (
set /a "sur=(%1-128)*256*256*256+!sur!"
set suw=000000000!sur:~-9!
set /a suw=1!suw:~-9!-1000000000+147483648
set /a sut=!sur:~0,-9!+!suw:~0,-9!+2
set "sur=!sut!!suw:~-9!"
) else (
set /a sur=%1*256*256*256+!sur!
)

set "%5=!sur!"
goto :eof
[ 联系联盟系统管理团队 - 中国DOS联盟 - 标准版 ]
Sponsored by ifanr Inc | © 2001–2023