- 积分
- 2850
- 明经币
- 个
- 注册时间
- 2008-10-18
- 在线时间
- 小时
- 威望
-
- 金钱
- 个
- 贡献
-
- 激情
-
|
进制转换函数大家看得很多了吧,这个有什么特别呢?
所有常用进制的转换都写在了“一个函数”里! 你再也不必写 2to8, 8to16, 16to2.....这么多的函数了
- ;; 进制转换函数--专辑
- ;| (x!2n num from) = from 进制数值转十进制----by lxx.2005.5 ok!
- 参数:
- num = 要转换的数值
- from = 数值,表示要转换的数值的进制类型. 取值:2,8,16
- 返回: 转换进制后的字符串/数值.
- 说明: 1. 支持 类型自动识别,返回结果类型同要转换的数值类型,注意num前面要加'.
- 2. 支持非标准进制!
- 测试: (x!2n "9e" 16);;-> "158"
- (x!2n '9e 16) -> 158
- (x!2n '9E 16) -> 158
- (x!2n 9E 16) -> 6197 (错误,数值前需加')
- (x!2n "64" 8);; -> "52"
- (x!2n '64 8) -> 52
- (x!2n "100101" 2);;-> "37"
- (x!2n '100101 2);;-> 37
- (x!2n 100101 2) -> 37
- |;
- (defun x!2n (num from / $key lst i end)
- (if (not(= 'STR (type num)))
- (setq num (vl-princ-to-string num) $key T)
- (setq $key nil)
- )
- (setq lst (mapcar '(lambda (x)(if (< x 58)(- x 48)(- x 55)))
- (vl-string->list (strcase num)))
- i -1)
- (setq end (apply '+ (mapcar '(lambda (x) (* x (expt from (setq i (1+ i)))))(reverse lst))))
- (if $key end (itoa end) )
- )
- ;| (x!n2 num to) = 十进制转bas进制 -v2.0-----------by lxx.2005.10 ok!
- 参数:
- num = 要转换的数值
- to = 数值,表示要转换成的数值的进制类型. 如:2,8,16
- 返回: 转换进制后的字符串/数值.
- 说明: 1. 支持 类型自动识别,返回结果类型同要转换的数值类型.
- 2. 支持非标准进制!
- 测试:
- ;; 支持 类型自动识别. 字符串类型转换结果为字符串,符号or数字类型结果为符号or数字.
- (x!n2 "45" 16) -> "2D"
- (x!n2 '45 16) -> 2D
- (x!n2 45 16) -> 2D
- (x!n2 "19" 2) -> "2011"
- (x!n2 '19 2) -> 2011
- (x!n2 "29" 8) ;->"35"
- ;; 支持非标准进制!
- (x!n2 29 7) ;->41
- |;
- (defun x!n2 (num to / lst $key end)
- (if (= 'STR (type num))
- (setq num (atoi num) $key T)
- )
- (while (and (setq lst (cons (rem num to) lst))
- (> (setq num (fix (/ num to))) to)))
- (setq lst (cons num lst)
- lst (mapcar '(lambda(x)(if (<= x 9)(chr(+ 48 x))(chr(+ 55 x)))) lst))
- (setq end (apply 'strcat lst))
- (if $key end (read end))
- )
- ;| (x!x num from to) = 进制任意转换---ok!---by lxx.2005.10
- 参数:
- num = 要转换的数值
- from = 数值,表示要转换的数值的进制类型. 如:2,8,16
- to = 数值,表示要转换成的数值的进制类型. 如:2,8,16
- 返回: 转换进制后的字符串/数值.
- 说明: 1. 支持 类型自动识别,返回结果类型同要转换的数值类型.
- 2. 支持非标准进制!
- 3. 合并以上两个函数而成.
- 测试:
- (x!x "3a" 16 2) -> "111010"
- (x!x '3a 16 2) -> 111010
- (x!x '3a 16 12) ->4A ;;16进制转12进制.
- (x!x '33 4 7) -> 21 ;; 4进制转7进制. [url=mailto:33@4=15@10=21@7]33@4=15@10=21@7[/url].
- |;
- (defun x!x (num from to)
- (cond
- ((and (= 10 from)(= 10 to))num)
- ((= 10 from)(x!n2 num to))
- ((= 10 to)(x!2n num from))
- (T (x!n2 (x!2n num from) to))
- )
- )
|
评分
-
查看全部评分
|