二进制到整数 - > Erlang

BAR*_*BAR 8 binary erlang integer

我有一个二进制M,这样34 =将始终存在,其余的可能在任意数量的数字之间变化但总是一个整数.

M = [<<"34=21">>]
Run Code Online (Sandbox Code Playgroud)

当我运行此命令时,我得到一个答案

hd([X || <<"34=", X/binary >> <- M])

Answer -> <<"21">>
Run Code Online (Sandbox Code Playgroud)

我怎样才能使这个整数尽可能高效地使用它?

小智 21

[<<"34=",X/binary>>] = M,
list_to_integer(binary_to_list(X)).
Run Code Online (Sandbox Code Playgroud)

这产生整数 21


leg*_*cia 20

从R16B开始,binary_to_integer/1可以使用BIF :

OTP-10300

增加了四个新的BIFS, ,,erlang:binary_to_integer/1,2 和 .这些bif的工作方式类似于列表对应的工作方式,除非它们使用二进制文件.在大多数情况下,从二进制文件转换到二进制文件比从列表转换到列表更快.erlang:integer_to_binary/1erlang:binary_to_float/1erlang:float_to_binary/1,2

这些bifs会自动导入到erlang源文件中,因此可以在没有erlang前缀的情况下使用.

所以这看起来像:

[<<"34=",X/binary>>] = M,
binary_to_integer(X).
Run Code Online (Sandbox Code Playgroud)