Board logo

标题: [加密解密] 批处理实现ASCII与HEX文件字符的相互转换 [打印本页]

作者: hfg1977    时间: 2010-8-9 19:20     标题: 批处理实现ASCII与HEX文件字符的相互转换

Ascii与HEX 文件 字符 的相互转换


转载必须写明出处:批处理之家
  1. @goto start
  2. :help
  3. @echo.======== Ver:2.0 ==================== 发布日期: 2010-08-09 ==============
  4. @echo.        BAT_NAME:        Ascii2Hex.bat
  5. @echo.        返回值:                %def_filename%
  6. @echo.        返回值获的:        ┌ set /p strHEX=^<%def_filename%
  7. @echo.                        └ echo %%strHEX%%
  8. @echo.        调用:                call ASCII_Hex.bat [[-c] char] [-f filename] -A -H -?
  9. @echo.                        -c char :        字符 (默认)
  10. @echo.                        -f filename :        文件
  11. @echo.                        -A :                ASCII 转换到 HEX (默认)
  12. @echo.                        -H :                HEX 转换到 ASCII
  13. @echo.                        -X :                转换到网址方式(x:\abc\%%B2%%CE\1.jpg)
  14. @echo.                        -? :                查看帮助
  15. @echo.        例如:                call Ascii2Hex.bat abc def
  16. @echo.                        call Ascii2Hex.bat "abc def"
  17. @echo.                        此时 "" 也算作字符,必须成对使用
  18. @echo.                        call Ascii2Hex.bat -f filename -f filename -X
  19. @echo.                        此时 前一个filename作为源文件,后一个为目标文件
  20. @echo.                        call Ascii2Hex.bat -c "abc def" -a
  21. @echo.                        -H [-c char] [-f filename]
  22. @echo.                        字符必须是 "0E 02 56 FE" 形式,以空格分隔
  23. @echo.        大小限制:        ASCII文件 65279 Byte HEX文件65279*3=195837 Byte
  24. echo --^<MORE^>--&pause>nul
  25. @echo.        下列命令格式是正确的:
  26. @echo.                        call Ascii2Hex.bat -x -f 123.txt
  27. @echo.                        call Ascii2Hex.bat -f "12 3.txt" -x -f c:\x
  28. @echo.                        call Ascii2Hex.bat -f 2 abc def love
  29. @echo.====================== Copyright@ by hf-g 2010-07-15 [彭城] =============
  30. ping /n 4 127.0>nul&
  31. goto:end
  32. ::==============================================================
  33. :start
  34. @echo off
  35. setlocal enabledelayedexpansion
  36. ::==============================================================
  37. set "def_filename=ret_str.txt"
  38. ::echo "%1" & pause
  39. if /i "%~1"=="" goto help
  40. if /i "%~1"=="-?" goto help
  41. for /f "tokens=2" %%a in ('CHCP') do (if not "%%a"=="437" (mode con cols=80 lines=25&color 07&CHCP 437&graftabl 936))>nul
  42. ::工作路径设置:
  43. (pushd %~dp1&&pushd %~dp2&&pushd %~dp3&&pushd %~dp4)>nul
  44. echo CD=%cd%
  45. set "char="&set "filename=nul"&set "dec_size="&set "hex_str="&set "ascChar="&set "des_filename=nul"
  46. set /a char_BL=0,filename_BL=0,asc2hex_BL=0,hex2asc_BL=0,IPadd_BL=0,exit_BL=0
  47. set /a des_filename_BL=0
  48. set /a line=0,line_YU=0,count=0,num=0
  49. call:get_P %*
  50. if "%exit_BL%"=="1" goto end
  51. if not "%hex2asc_BL%"=="1" (
  52.         if "!char!"=="" (
  53.                 if not exist "%filename%" (echo 文件未找到 &set /a exit_BL=1&goto end)
  54.                 call:file2hex "%filename%"
  55.                 if "%des_filename_BL%"=="1" (
  56.                 echo.        ① ASCII文件 → HEX文件 &@echo.        文件 = %filename%  → %des_filename%
  57.                         if "!BigFile_BL!"=="1" (echo !hex_str!>>"%def_filename%"&ren "%def_filename%" "%des_filename%") else (echo !hex_str!>"%des_filename%")
  58.                 ) else (
  59.                 echo.        ② ASCII文件 → HEX文件 &@echo.        文件 = %filename%  → %def_filename%
  60.                         if "!BigFile_BL!"=="1" (echo !hex_str!>>"%def_filename%") else (echo !hex_str!>"%def_filename%")
  61.                 )
  62.         ) else (
  63.                 call:char2hex %char%
  64.                 if "%filename_BL%"=="1" (
  65.                 echo.        ③ ASCII字符 → HEX文件 &@echo.        字符 = %char%  → %filename%
  66.                         echo !hex_str!>"%filename%"
  67.                 ) else (
  68.                 echo.        ④ ASCII字符 → HEX字符 &@echo.        字符 = %char%  → %def_filename%
  69.                         echo !hex_str!>"%def_filename%"
  70.                 )
  71.         )
  72. ) else (
  73.         if "!char!"=="" (
  74.                 if not exist "%filename%" (echo 文件未找到 &set /a exit_BL=1&goto end)
  75.                 if "%des_filename_BL%"=="1" (
  76.                 echo.        ⑤ HEX文件 → ASCII文件 &@echo.        文件 = %filename%  → %des_filename%
  77.                 call:file2asc "%filename%" "%des_filename%"
  78.                 ) else (
  79.                 echo.        ⑥ HEX文件 → ASCII文件 &@echo.        文件 = %filename%  → %def_filename%
  80.                 call:file2asc "%filename%" "%def_filename%"
  81.                 )
  82.         ) else (
  83.                 set /p=%char%<nul>tempfile.txt
  84.                 if "%filename_BL%"=="1" (
  85.                 echo.        ⑦ HEX字符 → ASCII文件 &@echo.        字符 = %char%  → %filename%
  86.                 call:file2asc "tempfile.txt" "%filename%"
  87.                 set /p hex_str=<"%filename%"
  88.                 echo %hex_str%
  89.                 ) else (
  90.                 echo.        ⑧ HEX字符 → ASCII字符 &@echo.        字符 = %char%  → %def_filename%
  91.                 call:file2asc "tempfile.txt" %def_filename%
  92.                 set /p hex_str=<"%def_filename%"
  93.                 echo !hex_str!
  94.                 )
  95.         )
  96. )
  97. :end
  98. ::echo ☆☆☆
  99. del tempfile.txt strHEX.txt>nul 2>nul
  100. popd&popd&popd&popd
  101. exit /b
  102. ::=====================ASCII→HEX=========================================
  103. :char2hex
  104. echo %char%>tempfile.txt
  105. call:file2hex tempfile.txt char
  106. goto:eof
  107. ::=====================ASCII→HEX=========================================
  108. :file2hex
  109. set "dec_size=%~z1"
  110. if "%~2"=="char" (set /a dec_size-=2)
  111. ::转换16进制
  112. call:dec2hex %dec_size%
  113. echo.        -----------------------------------------------
  114. echo.                共计: %dec_size% == 0x%sum% byte
  115. ::计算debug生成文件的行数
  116. set /a line=%dec_size% / 16
  117. set /a line_YU=%dec_size% %% 16
  118. if %line_YU% GEQ 1 (set /a line+=1)
  119. set "sum=%sum:~0,-1%F"
  120. echo.                Debug_addr:%sum% 行数:%line%
  121. ::WinXP+命令行字符串最长8191个字符,当%hex_str%=8160(即源文件 2720&hAA0 BYte)字符时跳出for循环.
  122. ::2720/16=170行
  123. ::做个判断标记,用于%hex_str%写入文件控制.
  124. if %dec_size% GTR 2720 (set BigFile_BL=1&cd.>"%def_filename%") else (set BigFile_BL=0)
  125. ::地址+&H100
  126. ::set /a sum=0x%sum%+0x100
  127. ::call:dec2hex %sum%
  128. if "%~2"=="char" (
  129. (echo f0 %sum% 0&echo a0&echo DB '%char%'&echo. &echo d0 %sum%&echo q)|debug>strHEX.txt
  130. rem echo exit|%ComSpec% /k prompt f0 %sum% 0$_a0$_DB '%char%'$_$_d0 %sum%$_q$_|debug>strHEX.txt
  131. ) else (
  132. rem echo exit|%ComSpec% /k prompt d100 %sum%$_q$_|debug %~s1>strHEX.txt
  133. echo exit|%ComSpec% /k prompt f0 %sum% 0$_n%~s1$_l0$_d0 %sum%$_q$_|debug>strHEX.txt
  134. )
  135. for /f "tokens=1 delims=:" %%a in ('findstr -n "^-d" strHEX.txt') do set "skip=%%a"&&goto :f2h_p
  136. :f2h_p
  137. ::13D3:0000  47 3A 5C 44 4F 53 5C D4-B4 C2 EB 20 31 32 33 5C   G:\DOS\.... 123\
  138. ::01234567890123456789012345678901234567890123456789012345678901234567890123456
  139. ::Debug 一行共计77个字符(9+2+16*3+2+16=77),s_Char=前8个字节,e_Char=后8个字节
  140. for /f "skip=%skip% tokens=* usebackq delims=" %%a in ("strHEX.txt") do (
  141. set /a count=!count!+1
  142. set "allChar=%%a"
  143. set "s_Char=!allChar:~11,23!"
  144. set "e_Char=!allChar:~35,23!"
  145. set "ascChar=!allChar:~61,16!"
  146. if "%IPadd_BL%"=="1" (
  147.         if "0x!s_Char:~0,2!" lss "0x7f" (set "hex_str=!hex_str!!ascChar:~0,1!") else (set "hex_str=!hex_str!%%!s_Char:~0,2!")
  148.         if "0x!s_Char:~3,2!" lss "0x7f" (set "hex_str=!hex_str!!ascChar:~1,1!") else (set "hex_str=!hex_str!%%!s_Char:~3,2!")
  149.         if "0x!s_Char:~6,2!" lss "0x7f" (set "hex_str=!hex_str!!ascChar:~2,1!") else (set "hex_str=!hex_str!%%!s_Char:~6,2!")
  150.         if "0x!s_Char:~9,2!" lss "0x7f" (set "hex_str=!hex_str!!ascChar:~3,1!") else (set "hex_str=!hex_str!%%!s_Char:~9,2!")
  151.         if "0x!s_Char:~12,2!" lss "0x7f" (set "hex_str=!hex_str!!ascChar:~4,1!") else (set "hex_str=!hex_str!%%!s_Char:~12,2!")
  152.         if "0x!s_Char:~15,2!" lss "0x7f" (set "hex_str=!hex_str!!ascChar:~5,1!") else (set "hex_str=!hex_str!%%!s_Char:~15,2!")
  153.         if "0x!s_Char:~18,2!" lss "0x7f" (set "hex_str=!hex_str!!ascChar:~6,1!") else (set "hex_str=!hex_str!%%!s_Char:~18,2!")
  154.         if "0x!s_Char:~21,2!" lss "0x7f" (set "hex_str=!hex_str!!ascChar:~7,1!") else (set "hex_str=!hex_str!%%!s_Char:~21,2!")
  155.         if "0x!e_Char:~0,2!" lss "0x7f" (set "hex_str=!hex_str!!ascChar:~8,1!") else (set "hex_str=!hex_str!%%!e_Char:~0,2!")
  156.         if "0x!e_Char:~3,2!" lss "0x7f" (set "hex_str=!hex_str!!ascChar:~9,1!") else (set "hex_str=!hex_str!%%!e_Char:~3,2!")
  157.         if "0x!e_Char:~6,2!" lss "0x7f" (set "hex_str=!hex_str!!ascChar:~10,1!") else (set "hex_str=!hex_str!%%!e_Char:~6,2!")
  158.         if "0x!e_Char:~9,2!" lss "0x7f" (set "hex_str=!hex_str!!ascChar:~11,1!") else (set "hex_str=!hex_str!%%!e_Char:~9,2!")
  159.         if "0x!e_Char:~12,2!" lss "0x7f" (set "hex_str=!hex_str!!ascChar:~12,1!") else (set "hex_str=!hex_str!%%!e_Char:~12,2!")
  160.         if "0x!e_Char:~15,2!" lss "0x7f" (set "hex_str=!hex_str!!ascChar:~13,1!") else (set "hex_str=!hex_str!%%!e_Char:~15,2!")
  161.         if "0x!e_Char:~18,2!" lss "0x7f" (set "hex_str=!hex_str!!ascChar:~14,1!") else (set "hex_str=!hex_str!%%!e_Char:~18,2!")
  162.         if "0x!e_Char:~21,2!" lss "0x7f" (set "hex_str=!hex_str!!ascChar:~15,1!") else (set "hex_str=!hex_str!%%!e_Char:~21,2!")
  163. ) else (
  164.         if "%BigFile_BL%"=="0" (
  165.         set "hex_str=!hex_str!!s_Char! !e_Char! "
  166.         ) else (
  167.                 set "hex_str=!hex_str!!s_Char! !e_Char! "
  168.                 set /a write_BL=!count! "%%" 150
  169.                 if !count! GEQ %line% goto jmp1
  170.                 if  !write_BL! EQU 0 (echo !hex_str:~0,-1!>>"%def_filename%"&set "hex_str=")
  171.         )
  172. )
  173. set /p = +!count!+%line%+<nul
  174. if !count! GEQ %line% goto jmp1
  175. )
  176. :jmp1
  177. if "%IPadd_BL%"=="1" (
  178. set /a line_YU=16-!line_YU!
  179. if not "!line_YU!"=="16" (call set "hex_str=%%hex_str:~0,-!line_YU!%%")
  180. ) else (
  181. rem 计算byte,一个字符占3格(+1个空格)
  182. if not "!line_YU!"=="0" (set /a line_YU=^(16-!line_YU!^)*3+1) else (set /a line_YU=1)
  183. call set "hex_str=%%hex_str:~0,-!line_YU!%%")
  184. )
  185. if "%~2"=="char" (echo  返回值=%hex_str%)
  186. ::if !line_YU! == 16 set /a line_YU=0
  187. goto:eof
  188. ::=====================HEX→ASCII=========================================
  189. :file2asc
  190. set "file_size=%~z1"
  191. ::文件如果是单行的  多行的
  192. ::计算文件有效行数
  193. for /f %%a in ('findstr/n . "%~1"^|find /c /v ""') do set /a line=%%a
  194. ::echo 行数:%line%&pause
  195. ::prompt命令本身有长度限制1024 Byte,所以总命令行不能太长.
  196. ::计算生成文件Byte数 (%file_size% - %line%*2回车换行符 + %line%*1个空格)/3
  197. set /a dec_size=(%file_size%-%line% )/3
  198. call:dec2hex %dec_size%
  199. set dec_size_HEX=%sum%
  200. set /a end_addr=%dec_size%+0x100
  201. call:dec2hex %end_addr%
  202. set end_addr=%sum%
  203. echo         源文件:   行数:%line%        字节数:%file_size%
  204. echo         目标文件:                字节数:%dec_size% == 0x%dec_size_HEX%
  205. echo.        -----------------------------------------------
  206. ::--------------------------大文件处理--------------------------------------------------------------------
  207. ::WinXP+命令行字符串最长8191个字符,当%hex_str%=8160(即源文件 2720&hAA0 Byte)字符时跳出for循环.
  208. ::2720/16=170行 8160/3=2720
  209. ::当地址大于FFFF时,会重新回到当前段的0000地址.解决方法:指定段址:地址,地址大于FFFF时段址+1.??
  210. ::ASCII文件FFFF-H100=65279 Byte HEX文件65279*3=195837
  211. ::做个判断标记,用于%hex_str%写入文件控制.
  212. if %file_size% GTR 8160 (set BigFile_BL=1&cd.>tmpHEX.txt) else (set BigFile_BL=0)
  213. ::if %file_size% GTR 195837 (echo 文件大于64K,不可处理.&goto:eof)
  214. ::以24字节为一行,原始文件:16*3*21=1008-空格=1007每行,比较美观
  215. ::一次读取的字节越多,工作速度越快
  216. if %BigFile_BL%==1 (
  217. set /a _addr=100
  218. set "YU_str="
  219. for /f "tokens=* usebackq delims=" %%a in ("%~1") do (
  220. if "!YU_str!"=="" (set str=%%a) else (set str=!YU_str! %%a)
  221. call:getStrLen "!str!"
  222. set /a s=0
  223. set /a count=^(!strlen!+1^) / 72
  224. set /a YU_str=^(!strlen!+1^) "%%" 72
  225. if !YU_str! EQU 0 (set "YU_str=") else (call set "YU_str=%%str:~-!YU_str!%%")
  226. for /l %%i in (1,1,!count!) do (
  227. call echo e!_addr! %%str:~!s!,72%%>>tmpHEX.txt
  228. set /a s=%%i*72
  229. set /p = e!_addr!<nul
  230. set /a _addr=0x!_addr! + 24
  231. call:dec2hex !_addr!
  232. set _addr=!sum!
  233. )
  234. )
  235. call echo e!_addr! %%str:~!s!%%>>tmpHEX.txt
  236. set /p = e!_addr!<nul
  237.     (echo n%~s2&echo rcx&echo %dec_size_HEX%&echo w&echo q)>>tmpHEX.txt
  238. rem (echo n%~s2&echo rcx&echo %dec_size_HEX%&echo w&echo d100 %end_addr%&echo q)>>tmpHEX.txt
  239. debug<tmpHEX.txt>nul
  240. del tmpHEX.txt 2>nul
  241. goto:eof
  242. )
  243. ::--------------------end-------大文件处理----------------------------------------------------------------
  244. if "%line%"=="1" (
  245. rem set /p hex_str=<"%~1"
  246. rem 上面命令单行文本(>1022 Byte)并不能读完
  247. for /f "tokens=* usebackq delims=" %%a in ("%~1") do set "hex_str=%%a"
  248. ) else (
  249. for /f "tokens=* usebackq delims=" %%a in ("%~1") do set "hex_str=!hex_str! %%a"
  250. )
  251. ::(echo e100 %hex_str%&echo n%~s2&echo rcx&echo %dec_size_HEX%&echo w&echo q)|debug>nul
  252. (echo e100&echo %hex_str%&echo n%~s2&echo rcx&echo %dec_size_HEX%&echo w&echo q)|debug>nul
  253. ::(echo e100&echo %hex_str%&echo n%~s2&echo rcx&echo %dec_size_HEX%&echo w&echo q)|debug>strHEX.txt
  254. ::echo exit|%ComSpec% /k prompt e100$_%hex_str%$_$_$_n%~s2$_rcx$_%sum%$_w$_q$_|debug>strHEX.txt
  255. ::echo exit|%ComSpec% /k prompt e100 %hex_str%$_n%~s2$_rcx$_%sum%$_w$_q$_|debug>strHEX.txt
  256. goto:eof
  257. ::========================参数设置与获得============================
  258. :get_p
  259. ::echo ①"%~1" & pause
  260. if /i "%~1"①=="-c"① (
  261.         set "char=%~2"&set /a char_BL=1 & goto get_p3
  262. ) else (
  263.         if /i "%~1"=="-f" (
  264.         set "filename=%~2"&set /a filename_BL=1 & goto get_p3
  265.         ) else (
  266.                 if /i "%~1"=="-A" (
  267.                 set /a asc2hex_BL=1
  268.                 ) else (
  269.                         if /i "%~1"=="-H" (
  270.                         set /a hex2asc_BL=1
  271.                         ) else (
  272.                                 if /i "%~1"=="-X" (
  273.                                 set /a IPadd_BL=1
  274.                                 ) else (
  275.                                         rem 如果%1是个文件而不是文件夹
  276.                                         if not exist "%~1.\" (
  277.                                         if exist "%~1" (set "filename=%~1"&set /a filename_BL=1 & goto get_p_end)
  278.                                         )
  279.                                         set "char=%*" & goto get_p_end
  280.                                 )
  281.                         )
  282.                 )
  283.         )
  284. )
  285. :get_p2
  286. ::echo ②"%~1" & pause
  287. if /i "%~2"=="" goto:eof
  288. if /i "%~2"②=="-c"② (
  289.         set "char=%~3"&set /a char_BL=1 & goto get_p4
  290. ) else (
  291.         if /i "%~2"=="-f" (
  292.         rem: [-AHX] [-f filename]
  293.         set "filename=%~3"&set /a filename_BL=1 & goto get_p4
  294.         ) else (
  295.                 if /i "%~2"=="-A" (
  296.                 set /a asc2hex_BL=1
  297.                 ) else (
  298.                         if /i "%~2"=="-H" (
  299.                         set /a hex2asc_BL=1
  300.                         ) else (
  301.                                 if /i "%~2"=="-X" (
  302.                                 set /a IPadd_BL=1
  303.                                 ) else (
  304.                                         rem: [-AHX] char
  305.                                         set "char=%*"
  306.                                         set "char=!char:~3!"
  307.                                         if "%hex2asc_BL%"=="1" set "char=!char:"=!"
  308.                                         goto get_p_end
  309.                                 )
  310.                         )
  311.                 )
  312.         )
  313. )
  314. :get_p3
  315. if /i "%~3"=="" goto:eof
  316. if /i "%~3"③=="-c"③ (
  317.         rem: [-f filename] -C char
  318.         set "char=%~4"&set /a char_BL=1 & goto get_p5
  319. ) else (
  320.         if /i "%~3"=="-f" (
  321.         rem:  [-f filename] -f filename
  322.         rem:  [-c char] -f filename
  323.         if "%filename_BL%"=="1" (set "des_filename=%~4"&set /a des_filename_BL=1 & goto get_p5)
  324.         if "%filename_BL%"=="0" (set "filename=%~4"&set /a filename_BL=1 & goto get_p5)
  325.         ) else (
  326.                 if /i "%~3"=="-A" (
  327.                 set /a asc2hex_BL=1
  328.                 ) else (
  329.                         if /i "%~3"=="-H" (
  330.                         set /a hex2asc_BL=1
  331.                         ) else (
  332.                                 if /i "%~3"=="-X" (
  333.                                 set /a IPadd_BL=1
  334.                                 ) else (
  335.                                         rem: [-f filename] char
  336.                                         rem: [-c char] char
  337.                                         set "char=%*"
  338.                                         if "%char_BL%"=="1" (set "char=!char:~3!") else (set "char=!char:%~1 %~2 =!")
  339.                                         goto get_p_end
  340.                                         )
  341.                                 )
  342.                         )
  343.                 )
  344.         )
  345. )
  346. :get_p4
  347. if /i "%~4"=="" goto:eof
  348. if /i "%~4"④=="-c"④ (
  349. set "char=%~5"&set /a char_BL=1 & goto get_p_end
  350. ) else (
  351.         if /i "%~4"=="-f" (
  352.         rem: [-AHX] [-f filename] -f filename
  353.         rem: [-f filename] [-AHX] -f filename
  354.         if "%filename_BL%"=="1" (set "des_filename=%~5"&set /a des_filename_BL=1  & goto get_p_end)
  355.         ) else (
  356.                 if /i "%~4"=="-A" (
  357.                 set /a asc2hex_BL=1
  358.                 ) else (
  359.                         if /i "%~4"=="-H" (
  360.                         set /a hex2asc_BL=1
  361.                         ) else (
  362.                                 if /i "%~4"=="-X" (
  363.                                 set /a IPadd_BL=1
  364.                                 ) else (
  365.                                         rem: [-AHX] [-f filename] char
  366.                                         set "char=%*"
  367.                                         set "char=!char:%~1 %~2 %~3=!" & goto get_p_end
  368.                                         )
  369.                                 )
  370.                         )
  371.                 )
  372.         )
  373. )
  374. :get_p5
  375. if /i "%~5"=="" goto:eof
  376. rem: [-f filename] [-f filename] [-AHX]
  377. rem: [-c char] [-f filename] [-AHX]
  378. if /i "%~5"⑤=="-c"⑤ (
  379. echo get_p5 error: "-c" &goto end
  380. ) else (
  381.         if /i "%~5"=="-f" (
  382.         echo get_p5 error: "-c" &goto end
  383.         ) else (
  384.                 if /i "%~5"=="-A" (
  385.                 set /a asc2hex_BL=1
  386.                 ) else (
  387.                         if /i "%~5"=="-H" (
  388.                         set /a hex2asc_BL=1
  389.                         ) else (
  390.                                 if /i "%~5"=="-X" (
  391.                                 set /a IPadd_BL=1
  392.                                 ) else (
  393.                                         echo get_p5 error: 参数5 &set /a exit_BL=1&goto end
  394.                                         )
  395.                                 )
  396.                         )
  397.                 )
  398.         )
  399. )
  400. :get_p_end
  401. goto:eof
  402. ::=======================10进制转16进制==============================
  403. ::返回值在中%sum%
  404. :dec2hex decNumber
  405. if not "%frist_BL%"=="1" (set "frist_BL=1"&set "sum="&set "yu_num="&set /a sor_num=%*)
  406. set /a yu_num= %sor_num% %% 16
  407. set /a sor_num /= 16
  408. call:set_YU %yu_num%
  409. set sum=%ret%%sum%
  410. if %sor_num% lss 16 (set "end_BL=1"&call:set_YU %sor_num%) else (set "end_BL=0")
  411. if "%end_BL%"=="1" (set sum=%ret%%sum%&set "frist_BL=0"&goto:eof)
  412. goto dec2hex
  413. :set_YU
  414. set ret=
  415. if "%1" == "10" set ret=A
  416. if "%1" == "11" set ret=B
  417. if "%1" == "12" set ret=C
  418. if "%1" == "13" set ret=D
  419. if "%1" == "14" set ret=E
  420. if "%1" == "15" set ret=F
  421. if %1 lss 10 set ret=%1
  422. goto :eof
  423. ::==============END======10进制转16进制========== by hf-g ===========
  424. ::=======================获得字符串长度==============================
  425. ::返回值在中%strlen%
  426. :getStrLen mystr
  427. set "mystr=%~1"&set "strlen=0"
  428. if not defined mystr goto :eof
  429. for /l %%i in (0,1,8191) do (set strlen=%%i&if "!mystr:~%%i,1!"=="" (goto :eof))
  430. goto :eof
  431. ::==============END======获得字符串长度========== by hf-g ===========
复制代码
文件下载: MD5: 837efc2b409db1d9ae2854d07857d16f
链接: https://pan.baidu.com/s/1bqptGSs6M3pr_SckJES34A?pwd=78ba
作者: hfg1977    时间: 2010-8-10 13:22

你可以拖动一个文本文件到该bat上,从而得到其HEX格式的文本.

有任何建议和意见请跟帖留言或M我.
尾部 "10进制转16进制"模块精简,替换如下"
  1. ::=======================10进制转16进制==============================
  2. ::返回值在中%sum%
  3. :dec2hex decNumber
  4. set str=0123456789ABCDEF&set "sum="
  5. set/a d=%~1
  6. :lp
  7. set/a y=!d!%%16,d/=16
  8. call set sum=%%str:~!y!,1%%!sum!
  9. if !d! NEQ 0 goto:lp
  10. goto :eof
  11. ::==============END======10进制转16进制==============================
复制代码

[ 本帖最后由 hfg1977 于 2010-8-11 05:28 编辑 ]
作者: wenshan231    时间: 2011-3-1 20:20     标题: 回复 1楼 的帖子

lz你的文件怎么用呢?
我发现不会使用,是本身就不是应用文件吗?
谢谢lz
作者: wenshan231    时间: 2011-3-1 20:24     标题: 回复 1楼 的帖子

哦 谢谢 懂了
拖动一个文本文件到该bat上,从而得到其HEX格式的文本.
作者: shchaoge    时间: 2011-6-5 22:53

谢谢  谢谢
作者: Batcher    时间: 2011-9-29 10:48

回复 6# ogion


你用的是Win7系统?没有debug命令吧?
作者: shchaoge    时间: 2012-10-4 00:27

谢谢lz谢谢lz
作者: woods    时间: 2013-8-11 21:44

谢谢楼主,好霸气




欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2