找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 51820|回复: 15

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

[复制链接]
发表于 2008-3-4 13:31:00 | 显示全部楼层 |阅读模式
那天的发错了,写成了将十进制转换成12进制,我知道方法是一样的,但是要用批处理来写,我还不会
那天的那个贴子上管理员回复叫我问namejm
如果namejm看到了我的贴子请帮我解答一下,谢谢了!
发表于 2008-3-4 15:14:21 | 显示全部楼层
算法:
  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 编辑 ]

评分

参与人数 1PB +4 收起 理由
youxi01 + 4

查看全部评分

发表于 2008-3-4 15:20:21 | 显示全部楼层
:
  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
复制代码
发表于 2008-3-4 15:22:41 | 显示全部楼层
foxjl 抢先了,
比我的好
 楼主| 发表于 2008-3-4 16:26:25 | 显示全部楼层
谢谢了,取余数的那些我都忘记了,我把这复制下来,晚上好好看看,呵呵
谢谢各位了
发表于 2008-3-4 17:51:20 | 显示全部楼层
十六进制转换十进制
  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
复制代码

评分

参与人数 1PB +4 收起 理由
youxi01 + 4

查看全部评分

 楼主| 发表于 2008-3-5 14:53:51 | 显示全部楼层
set /a num /=16  这一句是干什么用的。我怎么看来看去都觉得这里好像读不通一样
这个num后面的/是除的意思还是什么意思啊,要是除的意思那后面的=又是什么意思啦
发表于 2008-3-5 15:01:17 | 显示全部楼层
set /a num/=16
是简写
set /a num=%num%/16
 楼主| 发表于 2008-3-5 15:23:25 | 显示全部楼层
谢了,这个/是当前面的num用是吧,总算是明白了,谢了喔
 楼主| 发表于 2008-3-6 10:54:55 | 显示全部楼层
call set/p=%%f:~%%i,1%%<nul
这一段中的=%%f:~%%i,1%%是将这一个变量中取F变量中的前%%i去掉,选取后一位,这个%%i就是一个变量,里面不止一个数,也就是不管%%i里面有多少位都会从中不断取出,并且每个都是去掉他所属的数(如A F)并且选项去掉之后的后一位,这样是否为正解,也许解答得不容易懂
发表于 2008-3-6 12:43:34 | 显示全部楼层
原帖由 希望的寄托 于 2008-3-6 10:54 发表
call set/p=%%f:~%%i,1%%

对,取变量%f%中%%i的下一位.
 楼主| 发表于 2008-3-6 15:17:47 | 显示全部楼层
谢谢,今天上午我一直没有看明白,后来搞一个简单的数字在纸上写着看,一一对应,最后才理解过来的,呵呵呵,谢谢版主啊
发表于 2008-3-6 16:56:01 | 显示全部楼层
干脆再加一点,凑成十进制转任意进制.
  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 编辑 ]
发表于 2008-3-6 17:54:05 | 显示全部楼层
set f=0123456789ABC
呵呵呵,少写了些字母吧?
发表于 2008-3-6 18:00:23 | 显示全部楼层
原帖由 随风 于 2008-3-6 17:54 发表
set f=0123456789ABC
呵呵呵,少写了些字母吧?
呵呵,多谢指正,代码已经更新.
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-4-5 19:48

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表