Erlang 位打包的输出

Output of Erlang bit packing

我无法理解 erlang 中的位打包。

假设:

R=4G=6B=8

那为什么输出是这样的:

<< R:5,G:5,B:6 >>

输出:<<33,136>>.

我不明白。谁能解释一下?

<< R:5,G:5,B:6 >>

这条记录我们分配了5,5和6位,结果是一个2字节的二进制序列。为了更好地理解为什么会发生这种情况,开始反向转换。将数字 33 和 136 转换为二进制形式:

integer_to_list(33,2).
integer_to_list(136,2).

"100001" “10001000”

我们得到以下几行。由于二进制序列的每一段都是8的倍数,所以在左边补充33个0的表示。

L2=lists:append("00",lists:append(integer_to_list(33,2),integer_to_list(136,2))).

"0010000110001000"

继续解码。第三个参数表示位数

V1 = list_to_integer(lists:sublist(L2,5),2).
V2 = list_to_integer(lists:sublist(L2,6,5),2).
V3 = list_to_integer(lists:sublist(L2,11,6),2).

4 6个 8

对不起我的英语,希望我解释清楚。