以二进制形式访问变量位置 - Erlang

时间:2013-06-04 12:56:17

标签: erlang

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

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

我意识到我可以对A进行排序并迭代B,直到我处于A内的位置,但对于这样一个简单的问题,这似乎有点过头了。 / p>

提前致谢!

2 个答案:

答案 0 :(得分:2)

您可以执行以下模块:

-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]).

答案 1 :(得分: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'。

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