标题: [文本处理] [分享]批处理实现十六进制码与十进制码互转 [打印本页]
作者: ZJHJ 时间: 2010-8-10 22:10 标题: [分享]批处理实现十六进制码与十进制码互转
级别不够,只能发在这里了。
- @echo off
- :: wangwei qq 251485609
- (chcp 437 &graftabl 936)>nul
- SET SYB=A100;0AEB 3030 3020 2030 3030 2420 00B8 CD00;B833 0001 33CD 05B8 CD00 A933 0007 F674;E086 300D A330 0102 C889 08B3 18E8 A300;0105 D089 08B3 0EE8 A300 0108 09B4 02BA;CD01 B421 CD4C F621 08F3 74E4 FE02 FEC0;88C0 B1C4 D204 25E8 0F0F 300D 3C30 7639;0402 8007 39FC 0376 C480 C307 ;
- SET V=;RCX;006C;N mouse.com;W;Q
- (ECHO.%SYB:;=&ECHO.DW %&ECHO.%V:;=&ECHO.%)|DEBUG>NUL
- :fhzb
- cls
- @echo.
- @echo 十六进制码与十进制码互转
- @echo.
- @echo 十六进制转十进制码
- @echo.
- @echo 十进制转十六进制码
- for /f "tokens=1-3" %%1 in ('mouse.com') do (set /a X=0x%%2,Y=0x%%3) 2>nul
- if %X% GTR 3 if %X% LSS 20 if %Y% EQU 4 goto slzs
- if %X% GTR 3 if %X% LSS 20 if %Y% EQU 6 goto szsl
- goto :fhzb
- :slzs
- cls
- @echo.
- @echo 十六进制转十进制码
- @echo.
- set/p file=输入要处理的十六进制文件:
- ::按空格分开为行
- cd.>temp.txt
- for /f "delims=" %%i in (%file%) do (
- for %%a in (%%i) do echo %%a>>temp.txt
- )
- cd.>十进制.txt
- setlocal EnableDelayedExpansion
- for /f %%a in (temp.txt) do (
- set s=%%a
- set /a s=0x!s!
- set /p=!s! <nul >>十进制.txt
- )
- del temp.txt
- goto:eof
- :szsl
- @echo off
- cls
- @echo.
- @echo 十进制转十六进制码(仅适合于十六进制转换的十进制码)
- @echo.
- set/p file=输入要处理的十进制文件:
- ::按空格分开为行
- setlocal EnableDelayedExpansion
- cd.>temp.txt
- for /f "delims=" %%i in (%file%) do (
- for %%a in (%%i) do echo %%a>>temp.txt
- )
- cd.>十六进制.txt
- for /f %%a in (temp.txt) do (
- set qwe=%%a
- set qwe=!qwe!
- call :duon %qwe%
- set /p=!cdm! <nul >>十六进制.txt
- )
- del temp.txt
- goto:eof
- :duon
- set /a y= qwe%%16
- set /a ya=qwe/16%%16
- set m=0123456789ABCDEF
- set cdm=!m:~%ya%,1!!m:~%y%,1!
- goto:eof
复制代码
----------
如果你要任意十进制转十六进制,可以将长度计算修改即可。有效处理为2147483647
即:
:duon
set /a y= qwe%%16
set /a ya=qwe/16%%16
set /a yb=qwe/256%%16
set /a yc=qwe/4096%%16
set /a yd=qwe/65536%%16
set /a ye=qwe/1048576%%16
set /a yf=qwe/16777216%%16
set /a yg=qwe/268435456%%16
set m=0123456789ABCDEF
set cdm=!m:~%yg%,1!!m:~%yf%,1!!m:~%ye%,1!!m:~%yd%,1!!m:~%yc%,1!!m:~%yb%,1!!m:~%ya%,1!!m:~%y%,1!
[ 本帖最后由 ZJHJ 于 2010-8-10 22:33 编辑 ]
作者: FOR 时间: 2010-8-10 22:26
http://www.bathome.net/thread-404-1-1.html
作者: hfg1977 时间: 2010-8-11 00:28
没必要搞这么复杂吧?
这些代码前人写过 n遍了.....
原理5. 十 ----> 十六
(25.625)(十)
整数部分:
25/16=1......9
1/16 =0......1
然后我们将余数按从下往上的顺序书写就是:19,那么这个19就是十进制25的十六进制形式
小数部分:
0.625*16=10(即十六进制的A或a)
然后我们将整数部分按从上往下的顺序书写就是:A,那么这个A就是十进制0.625的十六进制形式
所以:(25.625)(十)=(19.A)(十六)
我自己写的封装模块:,=2147483647- :::=======================10进制转16进制==============================
- ::返回值在中%sum%
- :dec2hex
- if not "%frist_BL%"=="1" (set "frist_BL=1"&set "sum="&set "yu_num="&set /a sor_num=%*)
- set /a yu_num= %sor_num% %% 16
- set /a sor_num /= 16
- call:set_YU %yu_num%
- set sum=%ret%%sum%
- if %sor_num% lss 16 (set "end_BL=1"&call:set_YU %sor_num%) else (set "end_BL=0")
- if "%end_BL%"=="1" (set sum=%ret%%sum%&set "frist_BL=0"&goto:eof)
- goto dec2hex
-
- :set_YU
- set ret=
- if "%1" == "10" set ret=A
- if "%1" == "11" set ret=B
- if "%1" == "12" set ret=C
- if "%1" == "13" set ret=D
- if "%1" == "14" set ret=E
- if "%1" == "15" set ret=F
- if %1 lss 10 set ret=%1
- goto :eof
-
- ::=======================END CODE===============================
复制代码
16转10 对于P来说不存在呀
set/a decNumber=0xhNumber
就ok了
作者: hfg1977 时间: 2010-8-11 00:44
re: mouse.com 楼主能否说明一下, 调用鼠标功能中断INT 33H 干什么呀?
.bat运行后 ntvdm.exe 占用100% 程序无反应.
[ 本帖最后由 hfg1977 于 2010-8-11 00:57 编辑 ]
作者: terse 时间: 2010-8-11 03:34
可以处理大点的数- @echo off&setlocal enabledelayedexpansion
- set/p s=输入转换数:
- set/p x=请输入要转换的几进制?
- set str=0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ
- :lp
- set /a "n=8189,m=0,r=0"
- for /l %%a in (1,1,14) do (
- set /a "u=(n+m)/2"
- for %%i in (!u!) do if "!s:~%%i!" equ "" (set /a n=u) else set /a m=u
- )
- for /l %%i in (0,1,%u%) do (
- rem set/a "n=!s:~%%i,1!+(r*10),r=n&1,n>>=1"
- set/a "n=!s:~%%i,1!+(r*10),r=n%%x,n/=x"
- set v=!v!!n!
- )
- set b=!str:~%r%,1!!b!
- if "!v:0=!" neq "" set s=!v!&set "v="&goto lp
- echo "!b!"
- pause
复制代码
作者: hfg1977 时间: 2010-8-11 04:49
看到楼上用字符串截取,我也跟着改进下
省了不少代码呀 哈哈 感谢了- ::==================10进制转16进制==============================
- ::返回值在中%ret%
- :dec2hex
- set str=0123456789ABCDEF&set "ret="
- set/a d=%~1
- :lp
- set/a y=!d!%%16,d/=16
- call set ret=%%str:~!y!,1%%!ret!
- if !d! NEQ 0 goto:lp
- goto :eof
- ::=======================END CODE===============================
复制代码
作者: qzwqzw 时间: 2016-3-29 09:36
本帖最后由 qzwqzw 于 2016-3-29 09:43 编辑
也顺便分享一下自己用过的两段代码吧
算法都差不太多,只不过稍微精简了些代码- @echo off & setlocal EnableDelayedExpansion
- set #i=22345
- set $t=0123456789ABCDEF
- set /a "#1=#i>>12,#2=(#i&0xF00)>>8,#3=(#i&0xF0)>>4,#4=#i&0xF"
- set #o=!$t:~%#1%,1!!$t:~%#2%,1!!$t:~%#3%,1!!$t:~%#4%,1!
- echo %#i%=0x%#o%
- pause
复制代码
- :dec2hex - %1 十进制数值 %2 十六进制变量名
- setlocal EnableDelayedExpansion
- set #i=%1
- set $t=0123456789ABCDEF
- for /l %%i in (1,1,8) do set/a"#%%i=#i&15,#i>>=4"&for %%e in (!#%%i!) do set #o=!$t:~%%e,1!!#o!
- endlocal & set %2=%#o%
复制代码
作者: CrLf 时间: 2016-3-29 10:00
回复 7# qzwqzw
您这潜水艇是核动力的哈哈,一潜就是好几年
作者: CrLf 时间: 2016-3-29 10:05
hta:- @echo off
- for /f %%a in ('"mshta http://bathome.net/s/hta/ 123456 .toString(16)"') do echo 0x%%a
复制代码
作者: qzwqzw 时间: 2016-3-29 10:43
回复 8# CrLf
是好久没来了
话说9楼用到的在线HTA脚本似乎有一段时间了
有点“云计算”的意思
不知道是谁的大作啊?
作者: codegay 时间: 2016-3-29 10:50
回复 10# qzwqzw
就他.
作者: qzwqzw 时间: 2016-3-29 11:23
嗯,刚才翻了翻HTA库的源码
顺便也了解了一下该项目的源流
bat、vbs、js 原生混编
http://www.bathome.net/thread-34109-1-1.html
批处理之家 js 在线脚本库
http://www.bathome.net/thread-34544-1-1.html
确实奇思妙想浩帙鸿篇
几位主创均非一般
尤其CrLF更是非凡
作者: qzwqzw 时间: 2016-3-29 11:31
本帖最后由 qzwqzw 于 2016-3-29 11:33 编辑
最后还是回归楼主十进制转换的正题吧
刚才简单调整了一下自己的第二段代码
查表替换的思路也是拾人牙慧
个人代码还是以实用为主效率为辅- :dec2hex - %1 十进制数值 %2 十六进制变量名
- setlocal EnableDelayedExpansion
- set n=%1
- for /l %%i in (1,1,8) do set/a"H%%i=n&15,n>>=4"&set o=!H%%i!:!o!
- for %%e in ("10:=A" "11:=B" "12:=C" "13:=D" "14:=E" "15:=F" ":=") do set o=!o:%%~e!
- endlocal & set %2=%o%
复制代码
作者: CrLf 时间: 2016-3-29 12:44
回复 12# qzwqzw
这评价好高,受精若宠受宠若惊...
其实原帖是这个:http://www.bathome.net/thread-38393-1-1.html
第三方工具的资源来自 Batch-CN 项目:http://www.bathome.net/viewthread.php?tid=32322
当然,最初的起源还是 est 的 mshta vbscript: 用法
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |