控制序列如何工作?

7st*_*tud 2 erlang

以下输出符合我的预期:

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

126> [97, 98, 0]. 
[97,98,0]
Run Code Online (Sandbox Code Playgroud)

但输出使用~s不是我所期望的:

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

我该如何解释输出?

leg*_*cia 5

所述~s控制序列期望得到的字符串,二进制或原子,而"与字符串语法"打印它.由于Erlang字符串只是整数列表,因此它也尝试[97, 98, 0]在此示例中作为字符串进行打印.另一方面,shell 试图猜测这个整数列表是否是一个字符串.

^@代表NUL角色.您可能熟悉插入符号,其中^A表示字节1,因为A是字母表中的第一个字母 - 或者换句话说,它表示字符的值比字符的ASCII值小64,因为A是65用ASCII.将它外推到0字节,你会发现@,ASCII为64.