0xc0ffee
Goto Top

Dezimal zu Hexadezimal

Hier habe ich ein Script programmiert mit dem es möglich ist "Dezimal zu Hexadezimal" zu konvertieren. Das ganze wurde auf Windows XP SP2 getestet.

Wie funktioniert das nun? Jedes Programm hat einen s. g. "ExitCode" (in C/C++ entspricht das dem return-Value von der main-Funktion) die Variable die abgefragt wird ist die versteckte
!=ExitCode!
Variable. Diese wird z. B. mit dem Befehl
SET ""  
abgerufen. Dieser ExitCode wird in einer 8-Stelligen hexadezimalen Zahl zurückgegeben.

Und nun zur Konvertierung:

RUN.bat
@ECHO OFF
SETLOCAL ENABLEDELAYEDEXPANSION

SET /P DEC_VALUE=DEC=

CALL Dec2Hex HEX_VALUE !DEC_VALUE!

ECHO HEX=!HEX_VALUE!
ECHO.
PAUSE


DEC2HEX.bat
:DEC2HEX_START
GOTO DEC2HEX_MAIN
REM ******************************************
REM *                                        *
REM * DEC2HEX [RETURN as Ref] [PARAM as Val] *
REM *                                        *
REM ******************************************

:DEC2HEX_MAIN
CMD /C EXIT %2

FOR /L %%A IN (0,1,8) DO (
	SET DEC2HEX_VAL=!=ExitCode:~%%A,1!
	IF !DEC2HEX_VAL! NEQ 0 (
		SET DEC2HEX_RETURN=!=ExitCode:~%%A!
		GOTO DEC2HEX_RETURN
	)
)

:DEC2HEX_RETURN
IF NOT DEFINED DEC2HEX_RETURN SET DEC2HEX_RETURN=0
SET %1=!DEC2HEX_RETURN!

:DEC2HEX_FREE
SET /F "USEBACKQ TOKENS=1 DELIMS==" %%A IN (`SET DEC2HEX_`) DO (  
	SET %%A=
)

:DEC2HEX_END
GOTO :EOF

Ich weiß nicht wie schnell das ist aber voll ausreichend und einfach geschrieben mit board eignen mitteln (der CMD).

Content-Key: 132273

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

Printed on: April 19, 2024 at 06:04 o'clock

Member: bastla
bastla Dec 26, 2009 at 10:36:33 (UTC)
Goto Top
Hallo 12648430 und willkommen im Forum!

Interessanter Ansatz - und funktioniert ... face-smile
Alternativ dazu sollte für positive Zahlen bis zur CMD-Genauigkeitsobergrenze von +2147483647 auch Folgendes genügen:
@echo off & setlocal
if [%1]== (set /p "Dez=Dezimalwert: ") else (set "Dez=%~1" & echo Dezimalwert: %~1)  

set "Z10=A" & set "Z11=B" & set "Z12=C" & set "Z13=D" & set "Z14=E" & set "Z15=F"  

set /a Rest=Dez
set "Hex="  

:Loop
if %Rest%==0 goto :Fertig
set /a Ziffer=Rest%%16
if %Ziffer% gtr 9 call set "Ziffer=%%Z%Ziffer%%%"  
set "Hex=%Ziffer%%Hex%"  
set /a Rest=Rest/16
goto :Loop

:Fertig
echo Hexadezimal: %Hex%
Grüße
bastla
Member: zensbert
zensbert Jan 23, 2010 at 08:08:35 (UTC)
Goto Top
Gibt es das auch einmal für umgekehrt, Hex zu Dezimal?

Danke..
Member: bastla
bastla Jan 23, 2010 at 11:38:35 (UTC)
Goto Top
Hallo chizophren!

Etwa so:
@echo off & setlocal
if [%~1]== (set /p "Hex=Hexwert: ") else (set "Hex=%~1" & echo Hexwert: %~1)  
set /a Dez=0x%Hex%
echo Dezimal: %Dez%
Grüße
bastla
Member: zensbert
zensbert Jan 23, 2010 at 18:13:58 (UTC)
Goto Top
Danke für die Antwort, mache aber irgendwas falsch..

Habe den hex-wert in einer variable drin.. (%ID%), habe der hex variable den wert gegeben, aber wird ja von deiner else klammer ja wieder überschrieben..
Ausgabe jedoch kommt nur:

Hexwert: %~1

sowie:

Ungültige Zahl. Nummerische Konstanten sind entweder dezimale (17),hexadezimale (0x11) oder oktale (021) Zahlen.

was mache ich falsch, klappts so bei dir?

Thx
Member: bastla
bastla Jan 23, 2010 at 18:19:12 (UTC)
Goto Top
Hallo chizophren!

Die Frage ist natürlich, was in Deiner Variablen steht ...

... ansonsten brauchst Du ja nur die eine Zeile
set /a Dez=0x%ID%
Grüße
bastla
Member: zensbert
zensbert Jan 24, 2010 at 08:31:39 (UTC)
Goto Top
dank dir.. so gings.. aber wofür ist dann die andere zeile?

Grüße..
Thomas
Member: bastla
bastla Jan 24, 2010 at 09:17:50 (UTC)
Goto Top
Hallo chizophren!
aber wofür ist dann die andere zeile?
Benutzeroberfläche ... face-wink

Grüße
bastla