控制序列如何工作?

时间:2017-02-10 18:40:40

标签: erlang

以下输出符合我的预期:

125> [97, 98, 99].
"abc"

126> [97, 98, 0]. 
[97,98,0]

但使用~s的输出并非我的预期:

127> io:format("~s~n", [[97, 98, 0]]).
ab^@
ok

如何解释输出?

1 个答案:

答案 0 :(得分:5)

~s控制序列期望获得字符串,二进制或原子,并使用字符串语法"打印它#34;。由于Erlang字符串只是整数列表,因此它尝试在此示例中将[97, 98, 0]打印为字符串。另一方面,shell tries to guess是否这个整数列表是一个字符串。

^@代表NUL角色。您可能熟悉caret notation,其中^A表示字节1,因为A是字母表中的第一个字母 - 或者换句话说,它表示其值比ASCII值小64的字节该字符,因为A是65的ASCII码。将其外推到0字节,您将找到@,其中ASCII为64。