C'est possible de convertir de l'hexa en décimal, via la substitution de variables, mais ça prends un paquet de lignes... Ceci étant dit, ça reste possible, même si j'émets des doutes sur la rapidité en cas d'appels "lourds" :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55
| @echo off
if "%1"=="" goto :help
setlocal enableextensions enabledelayedexpansion
REM Récupération du chiffre hexa complet.
set H=%1
REM Initialisation du résultat de conversion et du multiplicateur.
set /A C=0
set /A M=1
REM Parcours de la chaîne de caractères de droite à gauche.
for /l %%I in (-1, -1, -8) do (
REM Récupération du chiffre hexa, en partant de la fin.
set D=!H:~%%I,1!
echo Current hexa digit : !D!
REM Partie pénible : conversion hexa->décimal, chiffre par chiffre.
set /A V=-1
if /i !D!==0 set V=0
if /i !D!==1 set V=1
if /i !D!==2 set V=2
if /i !D!==3 set V=3
if /i !D!==4 set V=4
if /i !D!==5 set V=5
if /i !D!==6 set V=6
if /i !D!==7 set V=7
if /i !D!==8 set V=8
if /i !D!==9 set V=9
if /i !D!==a set V=10
if /i !D!==b set V=11
if /i !D!==c set V=12
if /i !D!==d set V=13
if /i !D!==e set V=14
if /i !D!==f set V=15
echo =^> Value : !V!
REM V vaut désormais la valeur numérique correspondante au chiffre hexa.
REM On va donc multiplier V par M, l'ajouter à C, et augmenter M.
if !V! GEQ 0 (
set /a V=!V!*!M!
set /a M=!M!*16
set /a C=!C!+!V!
) else (
echo =^> Convert error : !D! is not a valid hexadecimal digit.
echo =^> Result is truncated.
goto :breakloop
)
)
:breakloop
REM C contient le chiffre décimal final : on l'affiche.
echo.
echo Result : %1 = !C!
goto :eof
:help
echo Syntax: %0 ^<HexaDigit^>
echo Warning : maximum 8 digits are used (**SIGNED** 32 bits).
goto :eof |
Bon, je l'ai fait "super didactique", avec traces et tout, à toi d'extraire le juste nécessaire pour ton besoin. Je n'ai pas trouvé comment passer en 32 bits
NON signé par contre, faudra donc jongler un peu avec ça si nécessaire. Tu peux éventuellement faire une fonction qui traite l'entier en deux parties (une partie "milliard", un chiffre décimal, puis la partie "millions"), mais il n'est pas certain que ce soit réellement utile... Enfin, tu verras bien.
Je ne saurais trop te conseiller de faire une sous-fonction de tout ça, quitte à jouer avec les redirections pour récupérer la valeur numérique...
En version "minimale", sans traces ni contrôle d'erreur :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
| @echo off
setlocal enableextensions enabledelayedexpansion
set H=%1
set /A C=0
set /A M=1
for /l %%I in (-1, -1, -8) do (
set D=!H:~%%I,1!
if /i !D!==0 set V=0
if /i !D!==1 set V=1
if /i !D!==2 set V=2
if /i !D!==3 set V=3
if /i !D!==4 set V=4
if /i !D!==5 set V=5
if /i !D!==6 set V=6
if /i !D!==7 set V=7
if /i !D!==8 set V=8
if /i !D!==9 set V=9
if /i !D!==a set V=10
if /i !D!==b set V=11
if /i !D!==c set V=12
if /i !D!==d set V=13
if /i !D!==e set V=14
if /i !D!==f set V=15
set /a V=!V!*!M!
set /a M=!M!*16
set /a C=!C!+!V!
)
echo !C! |
Si quelqu'un veut mettre le bout de code en FAQ Batch, je n'y vois pas d'inconvénients pour ma part.
Partager