首页 > 常用资料 > LISP的10进制到16进制转换的函数
2010
04-01

LISP的10进制到16进制转换的函数

在CAD下写点东西,需要用到10进制和16进制的转换,搜了一下,在LISP里面居然没有现成的函数可以用,只有自己写了。转换原理早不记得了,GOOGLE搞定,10进制到16进制的转换,就是将待转数除以16,将商继续除以16,直到商为0,再将这几次除法的余数逆序排列就好了。
比如10进制的30转16进制:
1、30/16,商为1,余为14,16进制的E;
2、商1/16,商为0,余为1;
3、将余数逆序,为1E。
LISP下的10进制转16进制的函数,比较简单,但是有用:
(defun tth (t0 / tl tf i j hd hl l16)
(setq tf (fix (/ t0 16))
hl “”
l16 (list (cons 10 “a”) (cons 11 “b”) (cons 12 “c”) (cons 13 “d”) (cons 14 “e”) (cons 15 “f”)))
(while (/= tf 0)
(setq tl (append tl (list (rem t0 16)))
t0 tf
tf (fix (/ t0 16)))
)
(setq tl (append tl (list (rem t0 16))))
(setq i (length tl)
j (1- i))
(repeat i
(setq hd (nth j tl)
j (1- j))
(if (>= hd 10)
(setq hl (strcat hl (cdr (assoc hd l16))))
(setq hl (strcat hl (itoa hd))))
)
;;; (princ tl)
;;; (princ hl)
;;; (princ “\n”)
)
示例:
(tth 3246)
“cae”

最后编辑:
作者:z.kklt
这个作者貌似有点懒,什么都没有留下。

LISP的10进制到16进制转换的函数》有 1 条评论

  1. pem 说:

    cl-user> (format nil “~D” #xff)
    “255”
    cl-user> (format nil “~16r” 255)
    “FF”

留下一个回复