[函数]AutoCAD.Lisp十进制和其他进制的正整数的转换
已有 1426 次阅读2013-9-11 23:54
|系统分类:开发|
进制, hex, dec, oct, bin
(defun Decimal-To (int bit / tmp re bestr)
;;; (Decimal-To 33 2) return "100001"
;;; int必须为正整数
;;; bit必须大于1,且小于37(最多用到字母Z)。
(defun bestr (int)
(if (> int 9)
(vl-list->string (list (+ int 55)))
(itoa int)
)
) ;_end sub defun
(if (and (> bit 1) (< bit 37) (> int 0) (equal int (fix int)))
(progn
(setq int (fix int))
(while (>= int bit)
(setq re (bestr (rem int bit)))
(setq tmp (cons re tmp))
(setq int (/ int bit))
)
(setq tmp (cons (bestr int) tmp))
(apply 'strcat tmp)
)
nil
)
)
;;;****************反函数******************;;;
(defun To-Decimal (str bit / tmp re beint)
;;; str必须为函数Decimal-To返回的非nil的值或符合函数Decimal-To的值
;;; bit必须大于1,且小于37(最多用到字母Z)。
;;; (TO-DECIMAL "100001" 2) return 33
(defun beint (char / tmp)
(if (> char 57)
(- char 55)
(atoi (chr char))
)
) ;_end sub defun
(setq tmp (strlen str))
(apply '+
(mapcar '(lambda (x)
(setq tmp (1- tmp))
(* (beint x) (expt bit tmp))
)
(vl-string->list (strcase str))
)
)
)
;;; 二进制加法示例:(DECIMAL-TO (+ (TODECIMAL "1001" 2) (TODECIMAL "1010" 2)) 2)