【发布时间】:2017-06-29 05:16:04
【问题描述】:
以下输出如我所料:
125> [97, 98, 99].
"abc"
126> [97, 98, 0].
[97,98,0]
但是使用~s 的输出不是我所期望的:
127> io:format("~s~n", [[97, 98, 0]]).
ab^@
ok
我如何解释该输出?
【问题讨论】:
标签: erlang
以下输出如我所料:
125> [97, 98, 99].
"abc"
126> [97, 98, 0].
[97,98,0]
但是使用~s 的输出不是我所期望的:
127> io:format("~s~n", [[97, 98, 0]]).
ab^@
ok
我如何解释该输出?
【问题讨论】:
标签: erlang
~s 控制序列期望得到一个字符串、二进制文件或原子,并“使用字符串语法”打印它。由于 Erlang 字符串只是整数列表,因此在此示例中它也尝试将 [97, 98, 0] 打印为字符串。另一方面,shell tries to guess 这个整数列表是否应该是一个字符串。
^@ 表示 NUL 字符。您可能熟悉caret notation,其中^A 表示字节1,因为A 是字母表中的第一个字母——或者换句话说,它表示值比字符的ASCII 值小64 的字节,因为 A 在 ASCII 中是 65。将其外推到 0 字节,您会发现 @,即 ASCII 中的 64。
【讨论】: