erlang 如何从二进制得到N位

yzckvree  于 2023-05-11  发布在  Erlang
关注(0)|答案(2)|浏览(259)

我有一些二进制,如何从它得到N位?例如:<<2#101>>如何获得第一位?

jogvjijk

jogvjijk1#

通过使用二进制模式匹配:

1> Bin = <<2#101>>.
<<5>>
2> <<FirstBits:1, Rest/bitstring>> = Bin.
<<5>>
3> FirstBits.
0
4> Rest.
<<5:7>>

表达式FirstBits:1获取第一位。Rest现在是7位。您需要使用bitstring作为任何二进制数据的类型,因为它不再是8位的倍数(binary类型强制执行)。
单独查看这些位,我们可以看到Rest现在是原始二进制的最后7位:

5> bit_size(Bin).
8
6> [Bit || <<Bit:1>> <= Bin]. % Convert the binary to a "bit list"
[0,0,0,0,0,1,0,1]
7> bit_size(Rest).
7
8> [Bit || <<Bit:1>> <= Rest].
[0,0,0,0,1,0,1]

您可以使用任何长度来抓取固定数量的位(例如FirstBits:3以获取前三位)。如果未指定类型,则默认类型为integer。如果你想要一个新的二进制文件,你可以使用bitstring类型,就像FirstBits:3/bitstring

(> <<PrefixNum:3, _/bitstring>> = <<2#01010101>>.
<<"U">>
10> PrefixNum.
2
11> <<PrefixBit:3/bitstring, _/bitstring>> = <<2#01010101>>.
<<"U">>
12> PrefixBit.
<<2:3>>
4xy9mtcn

4xy9mtcn2#

看看文档中的Erlang Bit Syntax解释,应该可以澄清一些事情:
http://www.erlang.org/documentation/doc-5.6/doc/programming_examples/bit_syntax.html
当我开始学习Erlang时,我用ID3标签写了一个小例子(并不是说我在这奋进做得很好):
http://citizen428.net/archives/993

相关问题