如何在Lisp中将数字从某个基数转换为基数10? 是否有任何defaut功能可以做到这一点,如果不是我怎么能补充该功能?
答案 0 :(得分:5)
在my answer对您之前的问题https://stackoverflow.com/q/33634012/1281433的评论中,您(含蓄地)询问了这一点:
我还需要做反向功能(将任何基数中的数字转换为基数10),我不知道:(
我回答说,希望您访问文档,“Common Lisp HyperSpec非常全面。我建议您查找名称以解析 - 开头的函数。”为了更清楚,如果你去P in the index,有一个函数parse-integer可以完全满足您的要求。在我看来,这比在另一个答案中使用 * read-base * 和 read 的方法更安全,因为使用 read 可以打开你对一堆问题(你可以阅读非数字,可以有阅读时间评估等)。 parse-integer 可以满足您的要求:
(parse-integer "9" :radix 16) ;=> 9
(parse-integer "10" :radix 16) ;=> 16
(parse-integer "1af" :radix 16) ;=> 431
(parse-integer "111" :radix 2) ;=> 7
答案 1 :(得分:3)
整数基数只在可视化和解释方面很有意义。因此" 10"是十进制的十进制,八进制的八进制和十六进制的十六进制的可视化,但数字在内存中看起来不像。
您可以使用*print-base*
更改代表:
(let ((*print-base* 8))
(print 10)) ; ==> 10, but displays "12"
为什么它打印12是因为当*print-base*
打印8
后*print-base*
回到全局值时,表格的结果是*read-base*
。您可以使用(let ((*read-base* 16))
(with-input-from-string (in "10") (read in))) ; ==> 16
来读取数字:
{{1}}