【发布时间】:2018-03-29 21:32:20
【问题描述】:
假设我有以下位串:
B = <<0:5>>.
其中包含五个位:<<0,0,0,0,0>>
为了设置其中一个位,我使用了这个辅助函数:
-spec set(Bits :: bitstring(), BitIndex :: non_neg_integer()) -> bitstring().
set(Bits, BitIndex) ->
<< A:BitIndex/bits, _:1, B/bits >> = Bits,
<< A/bits, 1:1, B/bits >>.
我这样调用函数:
B2 = bit_utils:set(B, 2). % Referring to a specific bit by its index (2).
这会给我这个位串:<<0,0,1,0,0>>
是否有可能以某种方式将“标签”与位串中的每个位相关联?
类似这样的:<<A1=0,A2=0,A3=1,A4=0,A5=0, … >>
这样我就可以通过它的标签来引用每个位,而不是像上面的函数那样通过它的索引来引用。通过编写一个具有类似签名的函数:set(Bits, BitLabel)。
可以这样调用:set(Grid, "A3")
在我的应用程序中,我使用 81 位的固定大小位串作为 9*9“网格”(行和列)。能够通过行/列标识符(例如A3)引用每个“单元格”将非常有用。
【问题讨论】:
-
你不能只用位串来做到这一点。您必须使用带有该位串的辅助键/值数据类型(例如映射)。 key 可以是标签,value 可以是它的索引。