现在ip的表示方式有2种:
一种是数字型 例如:3758096383
另一种是大家常用的点分十进制 例如:223.255.255.255
我来解释下这2中ip 格式是如何进行转换的。
这个过程可以用windows的计算器实现,
首先打开科学计算方式,在十进制下输入数字型ip,转换成16进制
比如 3758096383 转换为16进制就是 DFFFFFFF
那么这个IP实际上就是dF.FF.FF.FF
分别把DF和FF转化为十进制,那么就是 223和255
最后的转换结果就是:233.255.255.255。原理比较简单。
我这里有一个文本ip.txt,内容如下:
=====txt=====
50331648 50331903 US
50331904 50332671 US
50332672 50332927 US
50332928 50333695 US
50333696 50333951 US
... ...
... ...
50333952 50334719 US
============
文本中的数字就是 ip地址。
我想写个批处理能把这个文本中的数字型ip 转换成点分十进制格式,并输出到另外一个文本保存。
当中涉及到10进制和16进制的多次转换和输出。由于本人批处理水平太菜,整了3天也没整出来,
特在此请象各位大侠请教,感谢万分! ! !
感谢各位老师的帮助。 请打下看看下面这段代码如何? 因为ip.txt数据量巨大,有700万条。
=====
=========
[ Last edited by HAT on 2009-1-16 at 15:44 ]
一种是数字型 例如:3758096383
另一种是大家常用的点分十进制 例如:223.255.255.255
我来解释下这2中ip 格式是如何进行转换的。
这个过程可以用windows的计算器实现,
首先打开科学计算方式,在十进制下输入数字型ip,转换成16进制
比如 3758096383 转换为16进制就是 DFFFFFFF
那么这个IP实际上就是dF.FF.FF.FF
分别把DF和FF转化为十进制,那么就是 223和255
最后的转换结果就是:233.255.255.255。原理比较简单。
我这里有一个文本ip.txt,内容如下:
=====txt=====
50331648 50331903 US
50331904 50332671 US
50332672 50332927 US
50332928 50333695 US
50333696 50333951 US
... ...
... ...
50333952 50334719 US
============
文本中的数字就是 ip地址。
我想写个批处理能把这个文本中的数字型ip 转换成点分十进制格式,并输出到另外一个文本保存。
当中涉及到10进制和16进制的多次转换和输出。由于本人批处理水平太菜,整了3天也没整出来,
特在此请象各位大侠请教,感谢万分! ! !
感谢各位老师的帮助。 请打下看看下面这段代码如何? 因为ip.txt数据量巨大,有700万条。
=====
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 HAT on 2009-1-16 at 15:44 ]

