如何从二进制中获取 N 位

问题描述 投票:0回答:2

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

erlang
2个回答
9
投票

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

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

0
投票

看看文档中的 Erlang Bit Syntax 解释,应该可以澄清一些事情:

http://www.erlang.org/documentation/doc-5.6/doc/programming_examples/bit_syntax.html

当我开始学习 Erlang 时,我使用 ID3 标签写了一个小例子(并不是说我在这方面取得了很大进展):

http://citizen428.net/archives/993

© www.soinside.com 2019 - 2024. All rights reserved.