[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[数值计算] 批处理如何将10进制转换成16进制?

那天的发错了,写成了将十进制转换成12进制,我知道方法是一样的,但是要用批处理来写,我还不会
那天的那个贴子上管理员回复叫我问namejm
如果namejm看到了我的贴子请帮我解答一下,谢谢了!

算法:
  1. 比如11271900转换成16进制是:ABFEDC
  2. 先拿16除11271900,商704493,余12
  3. 再拿16除704493,商44030,余13
  4. 再拿16除44030,商2751,余14
  5. 再拿16除2751,商171,余15
  6. 再拿16除171,商10,余11
  7. 再拿16除10,商0,余10
  8. 最后,倒着取这些:
  9. 10
  10. 11
  11. 15
  12. 14
  13. 13
  14. 12
  15. 然后按照这个表换算:
  16. 10=A
  17. 11=B
  18. 12=C
  19. 13=D
  20. 14=E
  21. 15=F
  22. 连起来就是:ABFEDC
复制代码


代码:
  1. @echo off
  2. set f=0123456789ABCDEF
  3. set /p num=输入十进制数字:
  4. :a
  5. set /a mod = %num% %% 16
  6. set /a num /=16
  7. set en=%mod% %en%
  8. if not %num% lss 1 (goto a)
  9. for %%i in (%en%) do (call set/p=%%f:~%%i,1%%<nul)
  10. pause>nul
复制代码

[ 本帖最后由 foxJL 于 2008-3-4 15:27 编辑 ]
1

评分人数

TOP

:
  1. @echo off&set str=9
  2. set max=10997
  3. set var=%max%
  4. for %%a in (A B C D E F) do (
  5.   set /a str+=1
  6.   call set _%%str%%=%%a
  7. )
  8. :lis
  9. set /a a=var%%16,var=var/16
  10. if defined _%a% call set a=%%_%a%%%
  11. set num=%a%%num%
  12. if %var% gtr 0 goto lis
  13. echo\&echo 十进制数 %max% 转换为十六进制数为:%num%
  14. echo\&pause
复制代码
技术问题请到论坛发帖求助!

TOP

foxjl 抢先了,
比我的好
技术问题请到论坛发帖求助!

TOP

谢谢了,取余数的那些我都忘记了,我把这复制下来,晚上好好看看,呵呵
谢谢各位了

TOP

十六进制转换十进制
  1. @echo off
  2. (set /a str=9,n=1,num=0)
  3. set var=2AF5
  4. echo %var%
  5. for %%a in (0 1 2 3 4 5 6 7 8 9 A B C D E F) DO (
  6.    call set var=%%var:%%a=%%a %%
  7. )
  8. for %%a in (%var%) do call set max=%%a %%max%%
  9. for %%a in (A B C D E F) do (
  10.   set /a str+=1
  11.   call set %%a=%%str%%
  12. )
  13. for %%a in (%max%) do (
  14.   set /a num=%%a*n+num
  15.   set /a n*=16
  16. )
  17. echo %num%
  18. pause>nul
复制代码
1

评分人数

技术问题请到论坛发帖求助!

TOP

set /a num /=16  这一句是干什么用的。我怎么看来看去都觉得这里好像读不通一样
这个num后面的/是除的意思还是什么意思啊,要是除的意思那后面的=又是什么意思啦

TOP

set /a num/=16
是简写
set /a num=%num%/16
技术问题请到论坛发帖求助!

TOP

谢了,这个/是当前面的num用是吧,总算是明白了,谢了喔

TOP

call set/p=%%f:~%%i,1%%<nul
这一段中的=%%f:~%%i,1%%是将这一个变量中取F变量中的前%%i去掉,选取后一位,这个%%i就是一个变量,里面不止一个数,也就是不管%%i里面有多少位都会从中不断取出,并且每个都是去掉他所属的数(如A F)并且选项去掉之后的后一位,这样是否为正解,也许解答得不容易懂

TOP

原帖由 希望的寄托 于 2008-3-6 10:54 发表
call set/p=%%f:~%%i,1%%

对,取变量%f%中%%i的下一位.

TOP

谢谢,今天上午我一直没有看明白,后来搞一个简单的数字在纸上写着看,一一对应,最后才理解过来的,呵呵呵,谢谢版主啊

TOP

干脆再加一点,凑成十进制转任意进制.
  1. @echo off
  2. ::code by foxjl bbs.bathome.net
  3. title 十进制转任意进制
  4. mode con cols=40 lines=20
  5. set f=0123456789ABCDEF
  6. for %%i in (2.十进制转二进制,8.十进制转八进制,12.十进制转十二进制,16.十进制转十六进制) do (
  7.         echo.&echo.&echo.&set /p=           %%i<nul)
  8.         echo.&echo.&        set /p n=           选择:
  9. cls
  10. title 十进制转%n%进制
  11. set /p num=输入十进制数字:
  12. :a
  13. set /a mod=num%%n,num /=n
  14. set en=%mod% %en%
  15. if not %num% lss 1 (goto a)
  16. for %%i in (%en%) do (call set/p=%%f:~%%i,1%%<nul)
  17. pause>nul
复制代码

[ 本帖最后由 foxJL 于 2008-3-6 17:59 编辑 ]

TOP

set f=0123456789ABC
呵呵呵,少写了些字母吧?
技术问题请到论坛发帖求助!

TOP

原帖由 随风 于 2008-3-6 17:54 发表
set f=0123456789ABC
呵呵呵,少写了些字母吧?
呵呵,多谢指正,代码已经更新.

TOP

返回列表