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

Ausgedruckt am: 29.03.2024 um 01:03 Uhr

Mitglied: bastla
bastla 26.12.2009 um 11:36:33 Uhr
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
Mitglied: zensbert
zensbert 23.01.2010 um 09:08:35 Uhr
Goto Top
Gibt es das auch einmal für umgekehrt, Hex zu Dezimal?

Danke..
Mitglied: bastla
bastla 23.01.2010 um 12:38:35 Uhr
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
Mitglied: zensbert
zensbert 23.01.2010 um 19:13:58 Uhr
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
Mitglied: bastla
bastla 23.01.2010 um 19:19:12 Uhr
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
Mitglied: zensbert
zensbert 24.01.2010 um 09:31:39 Uhr
Goto Top
dank dir.. so gings.. aber wofür ist dann die andere zeile?

Grüße..
Thomas
Mitglied: bastla
bastla 24.01.2010 um 10:17:50 Uhr
Goto Top
Hallo chizophren!
aber wofür ist dann die andere zeile?
Benutzeroberfläche ... face-wink

Grüße
bastla