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