我是erlang的新手,有一個可能很簡單的問題。二進制訪問變量二進制位 - Erlang
比方說,我有類似A = [ 7, 203, 15, 11 ]
和一些二進制B
。在運行時生成A
和B
。 有沒有一種簡單的方法來檢查B
中由A
中描述的位置中的位。 所以首先要檢查的是7,下一個203等等。
我意識到我可以對A
進行排序並遍歷B
,直到我處於A
之內的位置,但對於這樣一個簡單的問題似乎有點過於頂端。
在此先感謝!
我是erlang的新手,有一個可能很簡單的問題。二進制訪問變量二進制位 - Erlang
比方說,我有類似A = [ 7, 203, 15, 11 ]
和一些二進制B
。在運行時生成A
和B
。 有沒有一種簡單的方法來檢查B
中由A
中描述的位置中的位。 所以首先要檢查的是7,下一個203等等。
我意識到我可以對A
進行排序並遍歷B
,直到我處於A
之內的位置,但對於這樣一個簡單的問題似乎有點過於頂端。
在此先感謝!
你可以做類似如下模塊:
-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]).
heh ..使用遞歸而不是列表理解的相同匹配..但是你的版本從1開始計算位,而不是0 .. – Kaos
返回一個整數列表,因爲它是Erlang我當然從1開始計數:-) –
例使用列表理解:
A=[0,1,2,3,4,5,6,7].
B = <<"">>.
[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'。
編輯:b,修正了bug ...
ooops,已經回答了。 – Pascal