LISP的10进制到16进制转换的函数
作者:z.kklt 日期:2010-04-01
在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"
比如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"
评论: 1 | 引用: 0 | 查看次数: -
发表评论
上一篇
下一篇

文章来自:
Tags:
"255"
cl-user> (format nil "~16r" 255)
"FF"