[ Last edited by HAT on 2009-1-16 at 15:39 ]作者: slore 时间: 2009-1-16 14:36 标题: 第一为大于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%作者: slore 时间: 2009-1-16 14:39 数字表示范围不知道CMD有简单的方法没。
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作者: slore 时间: 2009-1-20 14:51 =.=
@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!
)