Erlang 位打包的输出
Output of Erlang bit packing
我无法理解 erlang 中的位打包。
假设:
R=4
、G=6
和 B=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
对不起我的英语,希望我解释清楚。
我无法理解 erlang 中的位打包。
假设:
R=4
、G=6
和 B=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
对不起我的英语,希望我解释清楚。