这两天论坛对进制的转换讨论的比较热闹
闲来没事,搞了个任意进制数互转
不知道算法对不对,
转换方法:
16进制转换10进制的方法我会。
代码中任意进制转成10进制的方法与16进制转10进制的方法是一样的。
欢迎测试,并指出错误。。
--------------------------------
代码思路:先将任意进制的数转换成10进制,再转换成需要的进制
: | @echo off&setlocal EnableDelayedExpansion&color 1f | | title 任意进制数互转 code by 随风 @bbs.bathome.net 2008/03/07 | | set "str=0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ" | | for /l %%a in (0 1 35) do ( | | set _%%a=!str:~%%a,1! | | set _!str:~%%a,1!=%%a | | ) | | :start | | setlocal&cls | | echo\&echo 本程序可将任意进制的数(1-36)转换成指定进制的数。 | | echo\&echo 输入方法: 需转换的数 空格 输入的数的进制 空格 被转换成的进制 | | echo\&echo 如需将 16 进制数 2af5 转换为 8 进制 | | echo\&echo 则输入 2af5 16 8 用空格分开即可 | | set /p zjz= &cls | | call :fff !zjz! | | set num=!var! | | if !qz! neq 10 call :loop | | if !hou! equ 10 goto xs | | :lis 10 进制转 n 进制 | | set /a yu=num%%hou,num/=hou | | call set jie=!!_%yu%!!!jie! | | if !num! gtr 0 goto lis | | set num=!jie! | | :xs | | echo\&echo !qz! 进制数 !var! | | echo\&echo !hou! 进制数 !num! | | pause>nul | | endlocal | | goto start | | :loop n 进制转 10 进制 | | for /l %%a in (0 1 100) do ( | | if not "!var:~%%a,1!"=="" ( | | call set sun=%%_!var:~%%a,1!%% !sun! | | )) | | set /a nnn=1,num=0 | | for %%a in (!sun!) do ( | | set /a num=%%a*nnn+num | | set /a nnn*=qz | | ) | | goto :eof | | :fff | | set var=%1&set qz=%2&set hou=%3 | | goto :eofCOPY |
|