【问题标题】:How to make program keep ASCII values in erlang?如何使程序在erlang中保留ASCII值?
【发布时间】:2015-01-28 19:14:24
【问题描述】:

我有一个从 erlang shell 输入的函数:

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

我想保留这样的 ASCII 值,但我的值在输出中被更改为整数。如何让程序不将它们解释为整数?

【问题讨论】:

  • 这里的关键点是您的huffman:table/1 函数返回的整数列表不仅包含“可打印字符”。你想如何显示它们?
  • 这就是我想要找回的方式:[{1,5,{2,3,{$L,2},{$O,1}},3},{3 ,2,{$E,1},{$H,1}}] (我在列表中有其他整数)。现在有点乱,但正如你所见,我希望 ASCII 值在通过我的函数后保持不变。

标签: erlang erlang-shell


【解决方案1】:

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(使用 ^G 中止) 1> [$H,$E,$L,$L,$O]。 “你好” 2>

【讨论】:

    【解决方案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"
    

    【讨论】:

    • 啊,我明白了,那回答了我的问题,如果我想要 ASCII 输出,就必须有一个单独的函数。谢谢!
    【解决方案3】:

    如果您想将某些内容打印为字符串,请使用:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-05-15
      • 2012-12-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-24
      • 1970-01-01
      相关资源
      最近更新 更多