标题: [文本处理] 批处理如何将10(十)进制数转换成16(十六)进制数? [打印本页]
作者: wosliming 时间: 2016-3-22 11:31 标题: 批处理如何将10(十)进制数转换成16(十六)进制数?
求帮忙做个 10进制 到16 进制的转换,,只需要做整数就够用了
10进制数范围是 0-255
就一个要求,生成的16进制都是两位表示,像1-16 直接转换成16进制,就一位,,要表示成 01 02....0A 0B...0E 这样- ::dec2hex
- set str=0123456789ABCDEF&set "ret="
- set/a d=%PWM%
- :st
- set/a y=%d%%%16,d/=16
- call set ret=%%str:~%y%,1%%%ret%
- if %d% NEQ 0 goto:st
- echo %ret%
复制代码
这个是参考论坛 hfg1977 大侠做的,求帮忙改进!
作者: happy886rr 时间: 2016-3-22 12:31
回复 1# wosliming - @echo off
- setlocal enabledelayedexpansion
- color 0f
- mode con cols=55 lines=25
- :main
- set /p n=请输入:
- for /l %%r in (1 1 2) do (
- set /a r=n%%16
- if !r! equ 10 (set r=A)
- if !r! equ 11 (set r=B)
- if !r! equ 12 (set r=C)
- if !r! equ 13 (set r=D)
- if !r! equ 14 (set r=E)
- if !r! equ 15 (set r=F)
- set nm=!r!!nm!
- set /a n=n/16
- if !n! equ 0 (
- if "!nm:~1!"=="" (set "nm=0!nm!")
- echo,!nm! &set "nm=" &pause>nul
- goto main
- )
- )
复制代码
作者: wosliming 时间: 2016-3-22 12:52
回复 2# happy886rr
谢谢
作者: WHY 时间: 2016-3-22 13:56
- cmd /c exit /b 100
- echo;%=ExitCode:~-2%
复制代码
作者: CrLf 时间: 2016-3-22 16:15
回复 2# happy886rr
可以 set list=0123456789abcdef,然后直接取字符
作者: happy886rr 时间: 2016-3-22 16:25
回复 5# CrLf
大师高明。就跟做网站的小图标一样。很多图标整成一个png,然后截取显示。
作者: bat-cmd 时间: 2016-3-22 17:03
如果十进制数超过255了,要怎么改?
比如二进制数为上万,或者10位十进制数,怎么转为十六进制,除了用计算器。
在此只讨论批处理,不借助其它工具。
谢谢!@
作者: CrLf 时间: 2016-3-22 20:17
本帖最后由 CrLf 于 2016-3-22 20:18 编辑
回复 7# bat-cmd
请参考旧帖:
http://www.bathome.net/viewthread.php?tid=15948
http://www.bathome.net/viewthread.php?tid=17141
http://www.bathome.net/viewthread.php?tid=8908
http://www.bathome.net/viewthread.php?tid=35057
作者: pcl_test 时间: 2016-3-22 22:01
- /*&cls
- @echo off
- set num=15
- cscript -nologo -e:jscript "%~f0" %num%&pause&exit
- */
- WSH.echo(Number(WScript.Arguments(0)).toString(16))
复制代码
作者: pcl_test 时间: 2016-3-22 22:05
本帖最后由 pcl_test 于 2016-3-22 22:26 编辑
- @powershell -c "[Convert]::ToString(15,16)"&pause
复制代码
作者: pcl_test 时间: 2016-3-22 22:26
- @echo 15|gawk "{printf(\"%%x\n\",$0)}"&pause
复制代码
作者: CrLf 时间: 2016-3-23 00:17
gawk 来了,那也来条 sed,不适合大数字:- set /a n=130
- echo @|sed -r "1{:a;s/$/@/;/.{%n%}/!ba;}"|sed -r "s/^$/0/;:a;/@/!q;s/@{1,16}/ &/g;s/ @*$/ 0123456789ABCDEF&/;s/(\w*)(.*) +\w*(\w).{16}*$/\3\1\2/;s/ @{16}/@/g;ta"
复制代码
顺便搜到神帖一枚:
http://bbs.chinaunix.net/thread-1766801-1-1.html
欢迎光临 批处理之家 (http://bathome.net./) |
Powered by Discuz! 7.2 |