昨天玩一个在线过关游戏,有一个题目是直接给出了下一关的链接,但是形式是这样的:66656E677A686F6E6764656368656E67206E756F2E617370,一想,这是十六进制形式表示的ASCII码,非要一个个的将它们转换为%66%65%6E%67%7A%68%6F%6E%67%64%65%63%68%65%6E%67%20%6E%75%6F%2E%61%73%70的形式,但是这样太麻烦了,所以就想到写一个自动为字符串添加%符号的脚本。
最后又想将它功能加强一下,将这些十六进制的数依次转换成十进制数岂不是更好?于是又改进了一下,可以检测出输入字符串的长度,自动判断是不是十六进制的数。
代码如下,大家帮忙测试一下,有错误的地方尽可指出来。
::cody by lxmxn @ cn-dos.net
::Date 20:11 2006-12-29
@echo off&Setlocal EnableDelayedExpansion
:redo
set /p str=Please input a hex string:
if "%str%"=="" echo Invalid input,please input again.&pause&goto redo
cls&set a=0
:begin
if not "!str:~%a%,1!"=="" set /a a+=1&&goto begin
echo The string you inputed is ■%str%■,it length:■%a%■
echo;
set/p=The final result is:■<nul
for /l %%a in (0,2,%a%) do (
Setlocal EnableDelayedExpansion
if not "!str:~%%a,1!"=="" (
set /p result=%%!str:~%%a,2!<nul
)
Endlocal
)
echo ■
echo;
set /p choose=Change it to Hexadecimal? Please Enter Y or N to choose:^>
if /i not "%choose%"=="y" goto :eof
echo %str%|findstr "^*$" >nul
if errorlevel 1 echo;&echo;The string isn't a hexadecimal number.Any key to Exit.&pause>nul&goto :eof
echo;
(for /l %%a in (0,2,%a%) do (
Setlocal EnableDelayedExpansion
if not "!str:~%%a,1!"=="" (
set /a b=0x!str:~%%a,2!
set /p b= !b!<nul
)
Endlocal
))&echo;&echo;&echo;Press any key to exit.&pause>nul&goto :eof
[ Last edited by lxmxn on 2007-1-3 at 03:25 PM ]
