2016-01-29 83 views
5

Jak mogę przekonwertować sring na hex w skrypcie wsadowym DOS? Na przykład skonwertuj "abcd" na "61626364". Ponieważ "a" to 0x61 ...DOS Skrypt wsadowy do konwersji ciągu 2 hex

Próbowałem znaleźć rozwiązanie z sieci, jeden dzień, ale nie mogłem znaleźć odpowiedzi.

+0

Wątpię istnieje rozwiązanie tylko z pliku wsadowego. Byłoby łatwo z PowerShell, jeśli jest to opcja. –

Odpowiedz

3
: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! 

!! Pamiętaj, że edytor stackoverflow może uszkodzić znak tabulacji. tokens=2 delims= " Po delimach powinien być pojedynczy TAB.

wymaga ciągu przekazanego jako argument. Spójrz także na funkcję debnham'a :hexDump, której możesz użyć zamiast certutil.

5
@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% 

przykład wyjściowa:

C:\> test.bat abcd 
61626364 
+0

fajne :-) i prostsze niż certutil. – npocmaka