Podemos convertir un número en base decimal a cualquier base numérica (hasta base 36) con la siguiente función:
*------------------------------------------------------------- * FUNCTION Dec2Base() *------------------------------------------------------------- * Transforma un número decimal a base "n" * PARAMETROS: * tnDec: Numero a transformar * tnBase: Base numérica * USO: Dec2Base(16, 2) * RETORNA: Caracter *------------------------------------------------------------- FUNCTION Dec2Base(tnDec, tnBase) LOCAL lcNro, lnResto, lcChr IF EMPTY(tnBase) tnBase = 10 ENDIF lcNro = '' DO WHILE tnDec > 0 lnResto = MOD(tnDec, tnBase) tnDec = INT(tnDec / tnBase) lcChr = IIF(lnResto < 10, STR(lnResto,1), CHR(lnResto+55)) lcNro = lcChr + lcNro ENDDO RETURN(lcNro) *------------------------------------------------------------
A la inversa, podemos convertir un número en cualquier base, a base decimal con la siguiente función
*-------------------------------------------------------------
* FUNCTION Base2Dec
*-------------------------------------------------------------
* Transforma un numero en base "n" a decimal
* PARAMETROS:
* tcNro: Numero a transformar
* tnBase: Base numérica
* USO: Base2Dec("FFAA", 16)
* RETORNA: Numerico
*-------------------------------------------------------------
FUNCTION Base2Dec(tcNro, tnBase)
LOCAL lnHasta, lnDec, lnI, lnAsc, lnPeso
IF EMPTY(tnBase)
tnBase = 16
ENDIF
tcNro = UPPE(ALLTRIM(tcNro))
lnHasta = LEN(tcNro)
lnDec = 0
FOR lnI = lnHasta TO 1 STEP -1
lnAsc = ASC(SUBSTR(tcNro,lnI,1))
lnPeso = IIF(BETWEEN(lnAsc,48,57),lnAsc-48,lnAsc-55)
lnDec = lnDec + lnPeso * tnBase ^ (lnHasta - lnI)
ENDFOR
RETURN(lnDec)
*------------------------------------------------------------
Luis María Guayán
Muy buenas funciones, me ayudaron muchísimo, ¡muchas gracias!
ResponderBorrarComo tendría que aplicar la función para convertir un Decimal Negativo a Hexa. Por ejemplo -16256
ResponderBorrarExcelente, gracias
ResponderBorrarThanks a lot
ResponderBorrarMuy buenas gracias!
ResponderBorrar