Erlang位打包

时间:2015-05-01 04:09:22

标签: erlang

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

假设:

R=4G=6B=8

那么为什么输出如下:

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

输出:<<33,136>>

我不明白。有人可以解释一下吗?

1 个答案:

答案 0 :(得分:3)

<< 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个零的表示。

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

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