2

我是 erlang 的新手,有一个可能很简单的问题。

假设我有类似的东西A = [ 7, 203, 15, 11 ]和一些二进制文件B。两者都是在运行时生成的AB有没有一种简单的方法可以B通过A. 所以要检查的第一位是 7,接下来是 203,依此类推。

我意识到我可以进行排序A和迭代,B直到我处于其中的位置,A但对于这样一个简单的问题来说,这似乎有点过头了。

提前致谢!

4

2 回答 2

2

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]).
于 2013-06-04T13:23:26.547 回答
0

使用列表理解的示例:

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

编辑:呸,修复错误...

于 2013-06-04T13:31:42.940 回答