找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 2230|回复: 5

[LISP函数]:进制转换

[复制链接]

已领礼包: 6530个

财富等级: 富甲天下

发表于 2005-7-14 15:13:46 | 显示全部楼层 |阅读模式

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

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

×
本帖最后由 ScmTools 于 2013-4-29 20:52 编辑

关于“进制转换”,在明经通道(http://mjtd.com/function/index.a ... &ordertype=byletter
有这种程序,写的不错。
我将两个程序集合了以下,组成一个可以任意转换的函数,随意玩玩,其实没有什么意思。
[php]
(defun baseToDecimal (base val / pos power result tmp)   ;明经通道函数
  (setq        pos    (1+ (strlen val))
        power  -1
        result 0
        val    (strcase val)
  )
  (while (> (setq pos (1- pos)) 0)
    (setq result
           (+
             result
             (*        (if (> (setq tmp (ascii (substr val pos 1))) 64)
                  (- tmp 55)
                  (- tmp 48)
                )
                (expt base (setq power (1+ power)))
             )
           )
    )
  )
  result
)

(defun decimalToBase (base val / result tmp)   ;明经通道函数
  (setq result "")
  (while (> val 0)
    (setq result (strcat (if (> (setq tmp (rem val base)) 9)
                           (chr (+ tmp 55))
                           (itoa tmp)
                         )
                         result
                 )
          val         (fix (/ val base))
    )
  )
  result
)

(defun base1tobase2 (val base1 base2 / result)   ;组合函数
  (cond
    ((and (= (type val) 'INT) (= base1 10))
     (setq result (decimalToBase base2 val))
    )
    ((and (= (type val) 'STR) (= base1 10))
     (setq result (decimalToBase base2 (read val)))
    )
    ((= (type val) 'STR)
     (setq result (decimalToBase base2 (baseToDecimal base1 val)))
    )
    (t nil)
  )
  (if (= base2 10) (read result) result)
)[/php]

评分

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

查看全部评分

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

使用道具 举报

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

使用道具 举报

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

使用道具 举报

已领礼包: 3191个

财富等级: 富可敌国

发表于 2013-6-12 12:58:13 | 显示全部楼层
谢谢你的归纳与整理,有心人也学到了东西
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2020-7-21 16:24:03 | 显示全部楼层
16进制字符串转10进制整数
  1. (defun hex2dec(hex / map lst len p)
  2.   (setq map (vl-string->list "0123456789ABCDEF"))
  3.   (setq lst (mapcar '(lambda(x)(vl-position x map)) (vl-string->list (strcase hex))))
  4.   (setq len (length lst))
  5.   (setq p 0)
  6.   (if (< len 8)
  7.     (apply '+ (mapcar '(lambda(x)(lsh x (* 4 (- len (setq p (1+ p)))))) lst))
  8.     "最多转7位16进制字符串"
  9.   )
  10. )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-23 01:11 , Processed in 0.421155 second(s), 42 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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