A propósito, las probé y todas funcionan bien, asi que no creo que haya problemas
EDITO: Ya supe de quien eran los códigos: The Shadow
He aquí estas funciones:
Decimal a Binario
Código:
@echo off
::Info: Convierte un numero decimal a binario
::Parametros: %1=numero decimal
::Devuelve: %bin%=numero binario
::Nivel de precision:1 byte
:d2b
setlocal
if %1'==' goto err
set /a cmp=%1*1
if not %cmp%==%1 goto err
if /I %1 gtr 198 goto err
set bin=
set ay=%1
if %ay%==1 (set bin=1 && goto enda)
:aval
set lim=a
call :len %ay%
set /a lon=%len%-1
set lim=9
for /L %%a in (1,1,%lon%) do (
set lim=9%lim%
)
set lim=%lim: =%
set naa=0
:cnta
if "%naa%"=="%lim%" (goto tst)
set /a cy=%naa%*2
if /I "%cy%" EQU "%ay%" (
set bin=%bin%0
goto cmp
)
set /a naa=%naa%+1
goto cnta
:tst
set bin=%bin%1
:cmp
if /I %ay% lss 2 goto end
set /A ay=%ay%/2
goto aval
:ohce
set wrd=
set ohce=
if %1'==' goto er_o
set wrd=%1
set wrd=%wrd:"=cnf%
call :len %wrd%
set /a len=%len%-1
for /l %%a in (%len%,-1,0) do (
call :st %%wrd:~%%a,1%%
)
set ohce=%ohce:"=%
set ohce=%ohce:fnc="%
goto :EOF
:st
set p1=%1
set ohce=%ohce%%p1%
goto :EOF
:len
if %1'==' echo La sintaxis es: len [cadena] && goto :EOF
set w=%1
set a=0
set bol=0
:lp
call :cnt "%%w:~%a%,1%%" %a%
if %bol%==1 goto :EOF
set /a a=%a%+1
goto lp
:cnt
set cur=%1
set len=%2
if %cur%a==""a (
set bol=1
)
goto :EOF
:er_o
echo La sintaxis es: h2d [cadena]
goto :EOF
:err
echo La sintaxis es: && echo.
echo d2b [numero]
echo. && echo Los numeros estan limitados a 1 byte aprox.
goto :EOF
:end
call :ohce %bin%
set bin=%ohce%
:enda
echo %bin%
endlocal
goto :EOF
Decimal a Hexadecimal
Código:
@echo off
if %1'==' goto er_h
set hexstr=0123456789ABCDEF
set last=
set /A dec=%1
:loop2
set /A ths=%dec% %% 16
call :evals %%hexstr:~%ths%,1%%
if /I %dec% GEQ 16 (
set /A dec=%dec%/16
) else (
echo %last%
goto:EOF
)
goto:loop2
:evals
set last=%1%last%
goto:EOF
:er_h
echo La sintaxis es: d2h [numero]
goto :EOF
Hexadecimal a Binario
Código:
@echo off
::Info: Convierte un numero hexadecimal a binario
::Parametros: %1=numero hexadecimal
::Devuelve: %bin%=numero binario
::Nivel de precision:1 byte
:h2b
setlocal
if %1'==' goto err
call :h2d %1
if /I %dec% gtr 198 goto err
set bin=
set ay=%dec%
if %ay%==1 (set bin=1 && goto enda)
:aval
set lim=a
call :len %ay%
set /a lon=%len%-1
set lim=9
for /L %%a in (1,1,%lon%) do (
set lim=9%lim%
)
set lim=%lim: =%
set naa=0
:cnta
if "%naa%"=="%lim%" (goto tst)
set /a cy=%naa%*2
if /I "%cy%" EQU "%ay%" (
set bin=%bin%0
goto cmp
)
set /a naa=%naa%+1
goto cnta
:tst
set bin=%bin%1
:cmp
if /I %ay% lss 2 goto end
set /A ay=%ay%/2
goto aval
:ohce
set wrd=
set ohce=
if %1'==' goto er_o
set wrd=%1
set wrd=%wrd:"=cnf%
call :len %wrd%
set /a len=%len%-1
for /l %%a in (%len%,-1,0) do (
call :st %%wrd:~%%a,1%%
)
set ohce=%ohce:"=%
set ohce=%ohce:fnc="%
goto :EOF
:st
set p1=%1
set ohce=%ohce%%p1%
goto :EOF
:len
if %1'==' echo La sintaxis es: len [cadena] && goto :EOF
set w=%1
set a=0
set bol=0
:lp
call :cnt "%%w:~%a%,1%%" %a%
if %bol%==1 goto :EOF
set /a a=%a%+1
goto lp
:cnt
set cur=%1
set len=%2
if %cur%a==""a (
set bol=1
)
goto :EOF
:er_o
echo La sintaxis es: h2d [cadena]
goto :EOF
:h2d
set dec="La sintaxis es: h2d [numero_hexadecimal]"
set /a dec=0x%1*1
goto :EOF
:err
echo La sintaxis es: && echo.
echo h2b [numero]
echo. && echo Los numeros estan limitados a 1 byte aprox.
goto :EOF
:end
call :ohce %bin%
set bin=%ohce%
:enda
echo %bin%
endlocal
goto :EOF
Hexadecimal a Decimal
Código:
@echo off
::Info: Convierte un numero hexadecimal a decimal
::Parametros: %1=numero hexadecimanl
::Devuelve: %h2d%=numero decimal
:h2d
set dec="La sintaxis es: h2d [numero_hexadecimal]"
set /a dec=0x%1*1
echo %dec% && goto :EOF