DOS批处理脚本转换字符串2十六进制
Posted
技术标签:
【中文标题】DOS批处理脚本转换字符串2十六进制【英文标题】:DOS Batch script to convert string 2 hex 【发布时间】:2016-05-06 17:54:21 【问题描述】:如何在 DOS 批处理脚本中将 sring 转换为十六进制? 例如,将“abcd”转换为“61626364”。 因为,'a' 是 0x61...
我试图从网上找到解决方案,一天,但找不到我的答案。
【问题讨论】:
我怀疑是否存在仅使用批处理文件的解决方案。如果可以的话,使用 PowerShell 会很容易。 【参考方案1】::stringToHex
@echo off
del tmp.hex >nul 2>nul
del tmp.str >nul 2>nul
if "%~1" equ "" (
echo no string passed
exit /b 1
)
echo|set /p=%~1 >tmp.str
::(echo(%~1)>tmp.str
rem certutil -dump tmp.str
certutil -encodehex tmp.str tmp.hex >nul
setlocal enableDelayedExpansion
set "hex_str="
for /f "usebackq tokens=2 delims= " %%A in ("tmp.hex") do (
set "line=%%A"
set hex_str=!hex_str!!line:~0,48!
set hex_str=!hex_str: =!
)
set hex_str=%hex_str:~0,-2%
echo !hex_str!
!!请注意,*** 编辑器可能会损坏制表符。tokens=2 delims= "
在 delims 之后应该有一个 TAB
。
需要作为参数传递的字符串。还可以查看 debnham 的 :hexDump 函数,您可以使用它来代替 certutil。
【讨论】:
【参考方案2】:@echo off
setlocal EnableDelayedExpansion
rem Store the string in chr.tmp file
set /P "=%~1" < NUL > chr.tmp
rem Create zero.tmp file with the same number of Ascii zero characters
for %%a in (chr.tmp) do fsutil file createnew zero.tmp %%~Za > NUL
rem Compare both files with FC /B and get the differences
set "hex="
for /F "skip=1 tokens=2" %%a in ('fc /B chr.tmp zero.tmp') do set "hex=!hex!%%a"
del chr.tmp zero.tmp
echo %hex%
输出示例:
C:\> test.bat abcd
61626364
【讨论】:
以上是关于DOS批处理脚本转换字符串2十六进制的主要内容,如果未能解决你的问题,请参考以下文章