在Scheme / Lisp中内置二进制转换

jdg*_*o12 2 lisp scheme

Scheme中是否有内置的二进制到十进制转换功能?

我发现了number->string可以将二进制转换为十进制形式的内置转换。

但是,相反的string->number情况不会像我所想的那样将小数转换为二进制字符串。

是否有内置函数或我们必须对其进行定义?

650*_*502 5

string->number函数接受一个可选radix参数:

(string->number "1001" 2)
==> 9
Run Code Online (Sandbox Code Playgroud)


mol*_*ilo 5

二进制和十进制表示数字;数字本身不是二进制或十进制。

number->string从数字(例如十二)转换为字符串(例如“ 12”),默认情况下输出数字的以10为底的表示形式。
(它不会从二进制转换为十进制-它的名称描述了它的作用。)

string->number从字符串(例如“ 12”)转换为数字(例如十二),默认情况下将字符串解释为数字的以10为底的表示形式。
(此函数的名称也描述了它的作用。)

您可以将两个参数传递给两个函数以使用不同的基本表示形式(2、8、10或16)。

要使用数字的二进制表示形式获取字符串n,请使用(number->string n 2)
要从s具有二进制表示形式的字符串中获取数字,请使用(string->number s 2)

例子:

> (number->string 120)
"120"
> (string->number "120")
120
> (number->string 120 2)
"1111000"
> (string->number "1111000" 2)
120
> (number->string 120 16)
"78"
> (string->number "78" 16)
120
Run Code Online (Sandbox Code Playgroud)