19 de marzo de 2002

Convertir base Decimal a: Binario, Octal, Hexadecimal, etc.

Dos funciones para convertir un número en base decimal a cualquier base numérica, y de cualquier base numérica a base decimal.

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

5 comentarios :

Los comentarios son moderados, por lo que pueden demorar varias horas para su publicación.