今天小弟又来分享我今天遇到的一段代码这个函数用来解压BIn(二进制)的数据
decode(Count,Bin) ->
Fun = fun(_,{<<Data:16/big-integer-unsigned,AccBin/binary>>,List}) ->
{AccBin,[Data|Lst]}
end,
lists:foldl(Fun,{Bin,[]},lists:duplicate(Count,0)).
以下就是我的感觉:
首先我先解释下lists:duplicate/2 这个新出现的函数作用就是创建出Count个0的列表,
大家可以查看这个网站得到更深的解释。上边的函数fun/2中的第一个参数用_表示是因为
我们并不关心由lists:duplicate(Count,0)抽取出来的0,重点我们应该集中在第二个参数,它将
我们传进的Bin分成了<<Data:16/big-integer-unsigned,AccBin/binary>>从而匹配出我们所需
的Data,接着就把这个Date放到List;AccBin就是用于下次循环作为被分解的Bin。就这么少
的几段代码就运用了lists中的二个函数,并将数据取出,这是不是很巧妙呢!大家可以在平
时使用这种方法。(复制并不可耻,重要的是能在过程将知识变为自己的~~来自我老师)
|