以下输出符合我的预期:
125> [97, 98, 99].
"abc"
126> [97, 98, 0].
[97,98,0]
但使用~s
的输出并非我的预期:
127> io:format("~s~n", [[97, 98, 0]]).
ab^@
ok
如何解释输出?
答案 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。