将二进制中的base 2数转换为Erlang整数

Str*_*s3D 3 binary erlang numbers base

假设我有一个像二进制符号表示的数字,如下所示:

<<0:1, 0:1, 0:1, 0:1, 0:1, 1:1, 1:1, 1:1>>
Run Code Online (Sandbox Code Playgroud)

这是数字7的二进制表示法,在shell中评估它甚至产生7:

<<7>>
Run Code Online (Sandbox Code Playgroud)

我如何将这个二进制转换为Erlang整数?我可以将二进制文件转换为列表,并获取其中的单个整数值,但这不会对需要多个字节的大数字起作用,因为列表将包含二进制文件中每个字节的项.

leg*_*cia 6

使用模式匹配:

Bin = <<0:1, 0:1, 0:1, 0:1, 0:1, 1:1, 1:1, 1:1>>,
Size = bit_size(Bin),
<<X:Size>> = Bin.
Run Code Online (Sandbox Code Playgroud)

之后,变量X包含整数7.无论二进制包含多少位,这都有效.


如果您想知道,实际上有必要Size在匹配之前将位大小绑定到变量.从Erlang参考手册的位语法表达式部分:

在位串构造中使用,Size是要求求整数的表达式.

用于位串匹配,Size必须是整数,或绑定到整数的变量.