我无法理解erlang中的位打包。
假设:
R=4
,G=6
和B=8
那么为什么输出如下:
<< R:5,G:5,B:6 >>
输出:<<33,136>>
。
我不明白。有人可以解释一下吗?
答案 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
对不起我的英语,希望我能解释清楚。