代码之家  ›  专栏  ›  技术社区  ›  Scatman_John

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

  •  0
  • Scatman_John  · 技术社区  · 10 年前

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

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

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

    3 回复  |  直到 10 年前
        1
  •  3
  •   filmor    10 年前

    Erlang不区分字符和整数。特别是,Erlang字符串文字像 "HELLO" 生成一个列表 [$H, $E, $L, $L, $O] shell通过启发式(基本上检查所有整数都是可打印的unicode字符)决定是否输出 [72, 69, 76, 76, 79] “你好” 。下面是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> 
        2
  •  2
  •   legoscia    10 年前

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

    在您显示的示例中,看起来需要将小整数保留为整数,同时将字母值打印为字母。类似的方法可能会奏效:

    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"
    
        3
  •  1
  •   tkowal    10 年前

    如果要将内容打印为字符串,请使用:

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