尝试使用List.to_integer
将十六进制转换为字符串时,我看到参数错误。
iex(1)> List.to_integer("C5",16)
** (ArgumentError) argument error
:erlang.list_to_integer("C5", 16)
在erlang中也可以使用
3> list_to_integer("C5", 16).
197
答案 0 :(得分:3)
行情很重要。
List.to_integer('C5', 16)
#⇒ 197
在Elixir charlist
中应使用单引号引起来。双引号保留用于二进制文件。
如果要将二进制转换为整数,则一种选择是通过charlist
:
"C5" |> to_charlist() |> List.to_integer(16)
#⇒ 197
另一种选择是Integer.parse/2
:
with {result, _} <- Integer.parse("C5", 16), do: result
#⇒ 197
答案 1 :(得分:2)
在Elixir中,用双引号引起来的字符是字符串,而不是列表,因此您需要使用String.to_integer
而不是List.to_integer
:
iex(1)> String.to_integer("C5", 16)
197
Elixir“ strings”与Erlang“ binaries”类型相同:
iex(2)> is_binary("C5")
true
如果使用单引号而不是双引号,则将得到Elixir称为“字符列表”,而Erlang则称为“字符串”-即,对应于Unicode代码点的整数列表:
iex(3)> is_list('C5')
true
iex(4)> [a, b] = 'C5'
'C5'
iex(5)> a
67
iex(6)> b
53