标题: [数值计算] 批处理如何将10进制转换成16进制? [打印本页]
作者: 希望的寄托 时间: 2008-3-4 13:31 标题: 批处理如何将10进制转换成16进制?
那天的发错了,写成了将十进制转换成12进制,我知道方法是一样的,但是要用批处理来写,我还不会
那天的那个贴子上管理员回复叫我问namejm
如果namejm看到了我的贴子请帮我解答一下,谢谢了!
作者: foxJL 时间: 2008-3-4 15:14
算法:
- 比如11271900转换成16进制是:ABFEDC
- 先拿16除11271900,商704493,余12
- 再拿16除704493,商44030,余13
- 再拿16除44030,商2751,余14
- 再拿16除2751,商171,余15
- 再拿16除171,商10,余11
- 再拿16除10,商0,余10
- 最后,倒着取这些:
- 10
- 11
- 15
- 14
- 13
- 12
- 然后按照这个表换算:
- 10=A
- 11=B
- 12=C
- 13=D
- 14=E
- 15=F
- 连起来就是:ABFEDC
复制代码
代码:
- @echo off
- set f=0123456789ABCDEF
- set /p num=输入十进制数字:
- :a
- set /a mod = %num% %% 16
- set /a num /=16
- set en=%mod% %en%
- if not %num% lss 1 (goto a)
- for %%i in (%en%) do (call set/p=%%f:~%%i,1%%<nul)
- pause>nul
复制代码
[ 本帖最后由 foxJL 于 2008-3-4 15:27 编辑 ]
作者: 随风 时间: 2008-3-4 15:20
:- @echo off&set str=9
- set max=10997
- set var=%max%
- for %%a in (A B C D E F) do (
- set /a str+=1
- call set _%%str%%=%%a
- )
- :lis
- set /a a=var%%16,var=var/16
- if defined _%a% call set a=%%_%a%%%
- set num=%a%%num%
- if %var% gtr 0 goto lis
- echo\&echo 十进制数 %max% 转换为十六进制数为:%num%
- echo\&pause
复制代码
作者: 随风 时间: 2008-3-4 15:22
foxjl 抢先了,
比我的好
作者: 希望的寄托 时间: 2008-3-4 16:26
谢谢了,取余数的那些我都忘记了,我把这复制下来,晚上好好看看,呵呵
谢谢各位了
作者: 随风 时间: 2008-3-4 17:51
十六进制转换十进制- @echo off
- (set /a str=9,n=1,num=0)
- set var=2AF5
- echo %var%
- for %%a in (0 1 2 3 4 5 6 7 8 9 A B C D E F) DO (
- call set var=%%var:%%a=%%a %%
- )
- for %%a in (%var%) do call set max=%%a %%max%%
- for %%a in (A B C D E F) do (
- set /a str+=1
- call set %%a=%%str%%
- )
- for %%a in (%max%) do (
- set /a num=%%a*n+num
- set /a n*=16
- )
- echo %num%
- pause>nul
复制代码
作者: 希望的寄托 时间: 2008-3-5 14:53
set /a num /=16 这一句是干什么用的。我怎么看来看去都觉得这里好像读不通一样
这个num后面的/是除的意思还是什么意思啊,要是除的意思那后面的=又是什么意思啦
作者: 随风 时间: 2008-3-5 15:01
set /a num/=16
是简写
set /a num=%num%/16
作者: 希望的寄托 时间: 2008-3-5 15:23
谢了,这个/是当前面的num用是吧,总算是明白了,谢了喔
作者: 希望的寄托 时间: 2008-3-6 10:54
call set/p=%%f:~%%i,1%%<nul
这一段中的=%%f:~%%i,1%%是将这一个变量中取F变量中的前%%i去掉,选取后一位,这个%%i就是一个变量,里面不止一个数,也就是不管%%i里面有多少位都会从中不断取出,并且每个都是去掉他所属的数(如A F)并且选项去掉之后的后一位,这样是否为正解,也许解答得不容易懂
作者: foxJL 时间: 2008-3-6 12:43
原帖由 希望的寄托 于 2008-3-6 10:54 发表
call set/p=%%f:~%%i,1%%
对,取变量%f%中%%i的下一位.
作者: 希望的寄托 时间: 2008-3-6 15:17
谢谢,今天上午我一直没有看明白,后来搞一个简单的数字在纸上写着看,一一对应,最后才理解过来的,呵呵呵,谢谢版主啊
作者: foxJL 时间: 2008-3-6 16:56
干脆再加一点,凑成十进制转任意进制.- @echo off
- ::code by foxjl bbs.bathome.net
- title 十进制转任意进制
- mode con cols=40 lines=20
- set f=0123456789ABCDEF
- for %%i in (2.十进制转二进制,8.十进制转八进制,12.十进制转十二进制,16.十进制转十六进制) do (
- echo.&echo.&echo.&set /p= %%i<nul)
- echo.&echo.& set /p n= 选择:
- cls
- title 十进制转%n%进制
- set /p num=输入十进制数字:
- :a
- set /a mod=num%%n,num /=n
- set en=%mod% %en%
- if not %num% lss 1 (goto a)
- for %%i in (%en%) do (call set/p=%%f:~%%i,1%%<nul)
- pause>nul
复制代码
[ 本帖最后由 foxJL 于 2008-3-6 17:59 编辑 ]
作者: 随风 时间: 2008-3-6 17:54
set f=0123456789ABC
呵呵呵,少写了些字母吧?
作者: foxJL 时间: 2008-3-6 18:00
原帖由 随风 于 2008-3-6 17:54 发表
set f=0123456789ABC
呵呵呵,少写了些字母吧?
呵呵,多谢指正,代码已经更新.
作者: 希望的寄托 时间: 2008-3-6 22:20
真是太牛了,小弟领教了
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |