ahstax
Goto Top

Aufbereitung von hex-String für "hex" to ascii mittels Batch

Hallo,

mit diesem Batch-Code-Schipsel:
set "str="  
set "hex=610068005F00700074"  
set "hex=00%hex%"			rem führt zu "00610068005F00700074"  
set "hex=%hex:00= 0x%"		rem führt zu " 0x61 0x68 0x5F 0x7 0x74"  

for %%H in (%hex%) do (
  for /l %%N in (%%H 1 %%H) do cmd /c exit %%N
  set "str=!str!!=ExitCodeASCII!"  
)
echo %str%
pause

lässt sich grundsätzlich der Inhalt der Variablen "hex" in die String-Variable "str" umwandeln.

Dieser Teil:
set "hex=610068005F00700074"  
set "hex=00%hex%"  
set "hex=%hex:00= 0x%"  
ist notwendig, da sonst die Sache nicht funktioniert.
Allerdings entfern
set "hex=%hex:00= 0x%"  

etwas mehr, als gewünscht, bspw hier 610068005F00700074

Ich bin auf der Suche nach einer Möglichkeit, den hex-"String" so aufzubereiten, dass alle Doppelnullen verschwinden, aber die notwendigen Informationen bleiben.

Kann man mit einer For-Schleife über den hex-"String" gehen und diesen so auslesen, dass man bspw. immer ein Zeichenpaar übernimmt und ein Zeichenpaar verwirft?
Wie würde man das machen?

Neugierige Grüße,
Andreas

Content-Key: 595582

Url: https://administrator.de/contentid/595582

Printed on: April 27, 2024 at 04:04 o'clock

Mitglied: 145033
Solution 145033 Aug 12, 2020 updated at 11:12:03 (UTC)
Goto Top
Warum man sich für sowas noch mit Batch einen abreißen muss kann ich zwar nicht nachvollziehen aber naja ...
@echo off & setlocal enabledelayedexpansion

set "hex=610068005F00700074"  
set "hex=00%hex%"	  

call :strLength strLen "%hex%"  
set /a strLen-=1

for /l %%a in (0 2 %strLen%) do (
	set "val=0x!hex:~%%a,2!"  
	for /l %%b in (!val! 1 !val!) do cmd /c exit %%b
	set "str=!str!!=ExitCodeASCII!"  
)
echo %str%

goto :eof

:strLength
set "#=%~2"  
set length=0
:stringLengthLoop
if defined # (set #=%#:~1%&set /A length += 1&goto stringLengthLoop)
set "%~1=%length%"  
goto :eof
Member: ahstax
ahstax Aug 12, 2020 at 11:17:26 (UTC)
Goto Top
DANKE!!!
Mitglied: 145033
145033 Aug 12, 2020 updated at 11:27:59 (UTC)
Goto Top
Bidde.

Mit n büßschen Powershell auch als Einzeiler in ner Batch
@echo off
chcp 65001 >nul
set "hex=610068005F00700074"  
for /f %%a in ('powershell -EP Bypass -C "[System.Text.Encoding]::UTF8.GetString(([regex]::matches('00%hex%','.{4}').Value | %%{[byte][convert]::ToUInt32($_,16)}))"') do set "str=%%a"  
echo %str%