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"



文章来自: 本站原创
引用通告: 查看所有引用 | 我要引用此文章
Tags: LISP 16进制 10进制 转换 CAD
相关日志:
评论: 1 | 引用: 0 | 查看次数: -
回复回复pem[2010-05-28 02:23 PM | del]
cl-user> (format nil "~D" #xff)
"255"

cl-user> (format nil "~16r" 255)
"FF"

发表评论
昵 称:
密 码: 游客发言不需要密码.
内 容:
验证码: 验证码
选 项:
虽然发表评论不用注册,但是为了保护您的发言权,建议您注册帐号.