如何在Elixir中将十六进制转换为整数?

时间:2018-08-23 05:06:01

标签: elixir

尝试使用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

2 个答案:

答案 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