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

She*_*dam 2 elixir

当尝试使用将十六进制转换为字符串时,我看到参数错误List.to_integer

iex(1)> List.to_integer("C5",16)
** (ArgumentError) argument error
:erlang.list_to_integer("C5", 16)
Run Code Online (Sandbox Code Playgroud)

在 erlang 中同样有效

3> list_to_integer("C5", 16).
197
Run Code Online (Sandbox Code Playgroud)

Ale*_*kin 5

报价很重要。

\n\n\n\n
List.to_integer(\'C5\', 16)\n#\xe2\x87\x92 197\n
Run Code Online (Sandbox Code Playgroud)\n\n

在 Elixir 中charlist应该放入单引号。双引号是为二进制文件保留的。

\n\n
\n\n

如果您想将二进制转换为整数,一种选择是执行charlist

\n\n
"C5" |> to_charlist() |> List.to_integer(16)\n#\xe2\x87\x92\xc2\xa0197\n
Run Code Online (Sandbox Code Playgroud)\n\n

另一种选择是Integer.parse/2

\n\n
with {result, _} <- Integer.parse("C5", 16), do: result\n#\xe2\x87\x92\xc2\xa0197\n
Run Code Online (Sandbox Code Playgroud)\n