如何让程序在erlang中保留ASCII值?

时间:2015-01-28 10:08:49

标签: erlang erlang-shell

我有一个函数,我从erlang shell进入:

huffman:table([$H,$E,$L,$L,$O]).

我希望保持这样的ASCII值,但是我的输出会改为整数。如何让程序不将它们解释为整数?

3 个答案:

答案 0 :(得分:3)

Erlang并不区分字符和整数。特别是,像"HELLO"这样的Erlang字符串文字会生成列表[$H, $E, $L, $L, $O]。 shell通过启发式(基本上检查所有整数是可打印的unicode字符)来决定它是输出[72, 69, 76, 76, 79]还是"HELLO"。这是我的shell会话中的输出:

Erlang R16B03 (erts-5.10.4) [64-bit] [smp:4:4] [async-threads:10]

Eshell V5.10.4  (abort with ^G)
1> [$H,$E,$L,$L,$O].
"HELLO"
2> 

答案 1 :(得分:2)

由于$H只是编写整数72的另一种方式,因此无法将其打印为Erlang内置的$H。你必须编写自己的函数来以这种方式输出值。

在您显示的示例中,看起来您需要将小整数保持为整数,同时将字母值打印为字母。这样的事情可能有用:

maybe_char_to_string(N) when $A =< N, N =< $Z ->
    [$$, N];
maybe_char_to_string(N) ->
    integer_to_list(N).

这是它输出的内容:

3> foo:maybe_char_to_string($H).
"$H"
4> foo:maybe_char_to_string(1).
"1"

答案 2 :(得分:0)

如果您想以字符串形式打印,请使用:

io:format("~s", [String]).