【发布时间】:2018-10-26 04:05:09
【问题描述】:
我有一个代表位的整数列表;例如[1,0,0,1,1,0,0,1,0,0,0,1,1,1,0,0] 我想把它转换成二进制,即<<153, 28>>,我知道列表的长度总是8的倍数。
我查看了 Elixir 文档,但找不到任何帮助(我寻找了确切的函数,还寻找了一个用于将位附加到二进制文件的函数)。
我已经编写了一个解决问题的函数(如下),但我希望有更好的方法,因为我认为我的函数看起来太复杂了。
def list_to_binary(l) do
if length(l) >= 8 do
<< Enum.at(l, 0) :: size(1),
Enum.at(l, 1) :: size(1),
Enum.at(l, 2) :: size(1),
Enum.at(l, 3) :: size(1),
Enum.at(l, 4) :: size(1),
Enum.at(l, 5) :: size(1),
Enum.at(l, 6) :: size(1),
Enum.at(l, 7) :: size(1)
>> <> list_to_binary(Enum.drop l, 8)
else
if length(l) == 0 do
<<>>
else
l = l ++ List.duplicate(0, 8 - length(l))
list_to_binary(l)
end
end
end
【问题讨论】:
标签: elixir