我有一些二进制,如何从它得到N位?例如:<<2#101>>如何获得第一位?
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位:
FirstBits:1
Rest
bitstring
binary
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。
FirstBits:3
integer
FirstBits:3/bitstring
(> <<PrefixNum:3, _/bitstring>> = <<2#01010101>>. <<"U">> 10> PrefixNum. 2 11> <<PrefixBit:3/bitstring, _/bitstring>> = <<2#01010101>>. <<"U">> 12> PrefixBit. <<2:3>>
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
2条答案
按热度按时间jogvjijk1#
通过使用二进制模式匹配:
表达式
FirstBits:1
获取第一位。Rest
现在是7位。您需要使用bitstring
作为任何二进制数据的类型,因为它不再是8位的倍数(binary
类型强制执行)。单独查看这些位,我们可以看到
Rest
现在是原始二进制的最后7位:您可以使用任何长度来抓取固定数量的位(例如
FirstBits:3
以获取前三位)。如果未指定类型,则默认类型为integer
。如果你想要一个新的二进制文件,你可以使用bitstring
类型,就像FirstBits:3/bitstring
。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