Base Conversion Functions

Here I demonstrate a selection of functions to convert numbers to and from various numerical bases (i.e. conversion between numeral systems with different radixes).

The functions demonstrate how to convert a decimal integer to an arbitrary base, for example to Base 16 (Hexadecimal), Base 2 (Binary), or perhaps Base 8 (Octal); and vice-versa.

I furthermore illustrate a method to convert a number from an arbitrary base to another, for example from Base 7 (Septenary) to Base 3 (Ternary).

Decimal to Base

Select all
;; Decimal to Base  -  Lee Mac
;; Converts a decimal number to another base.
;; n - [int] decimal integer
;; b - [int] non-zero positive integer base
;; Returns: [str] Representation of decimal in specified base

(defun LM:dec->base ( n b )
    (if (< n b)
        (chr (+ n (if (< n 10) 48 55)))
        (strcat (LM:dec->base (/ n b) b) (LM:dec->base (rem n b) b))
    )
)

Example Function Call

_$ (LM:dec->base 123 16)
"7B"
_$ (LM:dec->base 123  2)
"1111011"

Base to Decimal

Select all
;; Base to Decimal  -  Lee Mac
;; Converts an number in an arbitrary base to decimal.
;; n - [str] string representing number to convert
;; b - [int] base of input string
;; Returns: [int] Decimal representation of supplied number

(defun LM:base->dec ( n b / l )
    (if (= 1 (setq l (strlen n)))
        (- (ascii n) (if (< (ascii n) 65) 48 55))
        (+ (* b (LM:base->dec (substr n 1 (1- l)) b)) (LM:base->dec (substr n l) b))
    )
)

Alternative Version

Select all
;; Base to Decimal  -  Lee Mac
;; Converts an number in an arbitrary base to decimal.
;; n - [str] string representing number to convert
;; b - [int] base of input string
;; Returns: [int] Decimal representation of supplied number

(defun LM:base->dec ( n b )
    (   (lambda ( f ) (f (mapcar '(lambda ( x ) (- x (if (< x 65) 48 55))) (reverse (vl-string->list n)))))
        (lambda ( c ) (if c (+ (* b (f (cdr c))) (car c)) 0))
    )
)

Example Function Call

_$ (LM:base->dec "7B" 16)
123
_$ (LM:base->dec "1111011" 2)
123

Base to Base

Select all
;; Base to Base  -  Lee Mac
;; Converts an number from one base to another.
;; n  - [str] string representing number to convert
;; b1 - [int] input base
;; b2 - [int] output base

(defun LM:base->base ( n b1 b2 )
    (LM:dec->base (LM:base->dec n b1) b2)
)

Example Function Call

_$ (LM:base->base "7B" 16 2)
"1111011"
_$ (LM:base->base "1111011" 2 16)
"7B"

textsize

increase · reset · decrease

Designed & Created by Lee Mac © 2010