我是 erlang 的新手,有一个可能很简单的问题。
假设我有类似的东西A = [ 7, 203, 15, 11 ]
和一些二进制文件B
。两者都是在运行时生成的A
。B
有没有一种简单的方法可以B
通过A
. 所以要检查的第一位是 7,接下来是 203,依此类推。
我意识到我可以进行排序A
和迭代,B
直到我处于其中的位置,A
但对于这样一个简单的问题来说,这似乎有点过头了。
提前致谢!
我是 erlang 的新手,有一个可能很简单的问题。
假设我有类似的东西A = [ 7, 203, 15, 11 ]
和一些二进制文件B
。两者都是在运行时生成的A
。B
有没有一种简单的方法可以B
通过A
. 所以要检查的第一位是 7,接下来是 203,依此类推。
我意识到我可以进行排序A
和迭代,B
直到我处于其中的位置,A
但对于这样一个简单的问题来说,这似乎有点过头了。
提前致谢!
You could do something like the module below:
-module(bits).
-export([select/2]).
select(Pattern, Bitstring) -> select(Pattern, Bitstring, []).
select([], _, Acc) -> lists:reverse(Acc);
select([H | T], Bitstring, Acc) ->
Pos = H - 1,
<<_:Pos/bitstring, B:1/integer, _/bitstring>> = Bitstring,
select(T, Bitstring, [B | Acc]).
使用列表理解的示例:
A=[0,1,2,3,4,5,6,7].
B = <<"0123456789">>.
[begin
<<_:D/bits, Bit:1/bits, _/bits>> = B,
Bit
end
|| D <- A].
给出:
[<<0:1>>,
<<0:1>>,
<<1:1>>,
<<1:1>>,
<<0:1>>,
<<0:1>>,
<<0:1>>,
<<0:1>>]
这是0x30,即'0'。
编辑:呸,修复错误...