I was needing help with a batch file that would ask for user Input and the script would reverse byte order and save as a variable to be used later in another script.
For example :
User Input : 1B C9 6F 9A Would need it to converted to 9A 6F C9 1B with spaces.
Hex To Little Endian
Moderator: DosItHelp
Re: Hex To Little Endian
You could use a FOR /F loop.
Steffen
Code: Select all
set /p "BE=Enter four bytes: "
for /f "tokens=1-4" %%i in ("%BE%") do set "LE=%%l %%k %%j %%i"
echo %LE%
Steffen
-
- Posts: 100
- Joined: 16 Dec 2016 22:31
Re: Hex To Little Endian
I'm a bit late, am not I?
Though if you don't know the number of arguments you can also use this method.
Hope this helps.
Sounak
Though if you don't know the number of arguments you can also use this method.
Code: Select all
:reverse
set reargs=
call :reargs %*
echo(%reargs%
exit /b
:reargs
set "reargs=%1 %reargs%"
shift
if not "%1"=="" goto reargs
Input wrote:call :reverse 1 2 3 4 5 6 7 8 9 10
Output wrote:10 9 8 7 6 5 4 3 2 1
Hope this helps.
Sounak
Re: Hex To Little Endian
Sounak@9434 wrote::reverse
Actually reverting is not the same as changing endianness (byte order). The base type has a width of powers of 2. If the number of entered bytes exceeds the width of the type you may rather assume it's an array of elements with type width each.
Code: Select all
@echo off &setlocal EnableDelayedExpansion
set "BE=" &set "LE=" &set "unit="
choice /c 248 /m "Width of one unit"
set /a "width=1<<%errorlevel%"
set /p "BE=Enter the bytes: "
:loop
for /f "tokens=1-%width%*" %%i in ("%BE%") do (
set "b1=%%i" &set "b2=%%j" &set "b3=%%k" &set "b4=%%l" &set "b5=%%m" &set "b6=%%n" &set "b7=%%o" &set "b8=%%p" &set "rm=%%q"
)
if not defined b1 set "b1=00"
if not defined b2 set "b2=00"
set "unit=%b2% %b1%"
set "BE=%b3%"
if %width% gtr 2 (
if not defined b3 set "b3=00"
if not defined b4 set "b4=00"
set "unit=!b4! !b3! %unit%"
set "BE=%b5%"
)
if %width% gtr 4 (
if not defined b5 set "b5=00"
if not defined b6 set "b6=00"
if not defined b7 set "b7=00"
if not defined b8 set "b8=00"
set "unit=!b8! !b7! !b6! !b5! %unit%"
set "BE=%rm%"
)
set "LE=%LE% %unit%"
if defined BE goto loop
echo %LE:~1%
pause
Code: Select all
Width of one unit [2,4,8]?4
Enter the bytes: 00 01 02 03 04 05 06 07
03 02 01 00 07 06 05 04
Drücken Sie eine beliebige Taste . . .
Steffen
-
- Posts: 100
- Joined: 16 Dec 2016 22:31
Re: Hex To Little Endian
@aGerman: Okay, my answer was actually made around the request and I thought a simple reversing tool could do the work. Maybe multiple calls could do the work but definitely it is slower as it uses 'call :label' .
Your new answer solves the problem. Great work Steffen.
Your new answer solves the problem. Great work Steffen.