我一直在努力,现在修复了几个小时的问题,很新二郎神二郎打印十六进制,而不是整数
lists:sublist([6,9,15,24,39,6,96],7,1).
我想这个打印“100”,而不是“d”
什么我在这里做错了吗?
我一直在努力,现在修复了几个小时的问题,很新二郎神二郎打印十六进制,而不是整数
lists:sublist([6,9,15,24,39,6,96],7,1).
我想这个打印“100”,而不是“d”
什么我在这里做错了吗?
shell将尝试打印字符串作为字符串,只要它合法。这意味着,发生在所有是有效的字符将被打印成文字,以及含有其他的事情清单将被打印成列表整数的列表:
1> [65,66,67].
"ABC"
2> [3,65,66,67].
[3,65,66,67]
但通知,我实际上并没有调用任何输出功能。这只是shell的便捷操作,隐式地回显无论返回的值是什么,所以作为程序员,您可以检查它。
如果我要明确地调用我应该使用格式字符串指定的值的性质的输出函数进行插值:
3> io:format("This is a list: ~tw~n", [List]).
This is a list: [65,66,67]
ok
4> io:format("This is a list rendered as an implied string: ~tp~n", [List]).
This is a list rendered as an implied string: "ABC"
ok
5> io:format("This is a string: ~ts~n", [List]).
This is a string: ABC
ok
注意每次打印后,额外的原子ok
。这是因为io:format/2
的返回值为ok
。所以我们从format/2
获得显式输出,然后看到它的返回值。
的IO模块文档页面有坚韧不拔的细节:http://erlang.org/doc/man/io.html#format-1
回到你的榜样......
6> lists:sublist([6,9,15,24,39,6,96],7,1).
"`"
7> io:format("~tw~n", [lists:sublist([6,9,15,24,39,6,96],7,1)]).
[96]
ok
附录
有一个名为shell:strings/1
设置,告诉shell打开和关闭字符串格式:
1> [65,66,67].
"ABC"
2> shell:strings(false).
true
3> [65,66,67].
[65,66,67]
4> <<65,66,67>>.
<<65,66,67>>
5> shell:strings(true).
false
6> <<65,66,67>>.
<<"ABC">>
但我的几个原因不乱用此设置了过:
io
或io_lib
模块的实际输出功能,围绕格式化字符串开发习惯比从外壳方便输出更令人担忧。我想可以添加一些关于函数'shell:strings/1'的信息。 –
@Atomic_alarm感谢您的提醒。我添加了关于'shell:strings/1'的注释。我想要表达的主要是使用格式化字符串的一般方法,因为它永远是普遍有用的,而shell的便利值通常只是偶尔在玩这个想法时偶尔使用。 – zxq9
这不是十六进制,它是ASCII。 – tadman
上面的实际值不是ASCII“d”。你现在有一个反向(char值为96)... – zxq9