找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1082|回复: 3

[LISP函数]:十六进制与十进制相互转化

[复制链接]

已领礼包: 934个

财富等级: 财运亨通

发表于 2009-5-10 02:46:49 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
;十进制数转化为十六字符串
(defun TBC:DEC2HEX (dec / tmp x y n hex)
  (if dec
    (if        (= 0 dec)
      (setq hex "0")
      (progn (setq hex ""
                   x   dec
                   n   16

             )
             (while (< 0 x)
               (setq y         (rem x n)
                     x         (/ x n)
                     tmp (if (> y 9)
                           (chr (+ y 55))
                           (chr (+ y 48))
                         )
                     hex (strcat tmp hex)
               )
             )
      )
    )
  )
  hex
)

  ;十六进制字符串转化为十进制数
(defun TBC:HEX2DEC (hex / tmp i n dec)
  (if hex
    (progn (setq hex (strcase hex)
                 n   (strlen hex)
                 i   1
                 dec 0
           )
           (while (<= i n)
             (setq tmp (ascii (substr hex i 1))
                   i   (1+ i)
                   tmp (if (>= tmp 65)
                         (- tmp 55)
                         (- tmp 48)
                       )
                   dec (+ tmp (* 16 dec))
             )
           )
    )
  )
  dec
)

评分

参与人数 1D豆 +20 收起 理由
XDSoft + 20 很给力!经验;技术要点;资料分享奖!

查看全部评分

论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2009-5-13 07:50:47 | 显示全部楼层
各类进制转换
http://www.xdcad.net/forum/showthread.php?s=&threadid=653871
说明:包括10进制 2进制 8进制 16进制及ASCII码的转换
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 934个

财富等级: 财运亨通

 楼主| 发表于 2017-7-27 12:37:14 | 显示全部楼层
本帖最后由 tengteb 于 2017-7-27 12:43 编辑

改进后的函数(使用递归)

;十进制数转化为十六字符串
(defun TBC:DEC2HEX (dec / Func DEC2HEX n hex)
  (defun Func (x / ch)
    (if        (< x 10)
      (setq ch 48)
      (setq ch 55)
    )
    (list (+ x ch))
  ) ;defun
  (defun DEC2HEX (x)
    (if        (< x n)
      (Func x)
      (append (DEC2HEX (/ x n)) (Func (rem x n)))
    )
  ) ;defun
  (and
    dec
    (setq n   16
          hex (vl-list->string (DEC2HEX dec))
    )
    (> 2 (strlen hex))
    (setq hex (strcat "0" hex))
  ) ;and
  hex
)

  ;更新日期:2009.12.30
  ;十六进制字符串转化为十进制数
(defun TBC:HEX2DEC (hex / Func n dec)
  (defun Func (x / ch)
    (if        (< x 65)
      (setq ch 48)
      (setq ch 55)
    )
    (setq dec (+ (- x ch) (* 16 dec)))
  ) ;defun
  (if hex
    (progn
      (setq n        16
            dec        0
            hex        (vl-string->list (strcase hex))
      )
      (mapcar 'Func hex)
    )
  ) ;if  dec
)

论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 604个

财富等级: 财运亨通

发表于 2017-7-27 12:42:18 | 显示全部楼层
如果直接利用excel,可以利用定义好的函数进行二进制、十六进制、十进制、八进制相互转换。
http://bbs.xdcad.net/thread-706608-1-1.html
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-5-7 23:39 , Processed in 0.364734 second(s), 38 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表