gpt4 book ai didi

Elixir:将位列表转换为二进制

转载 作者:行者123 更新时间:2023-12-05 09:16:31 26 4
gpt4 key购买 nike

我有一个表示位的整数列表;例如[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

最佳答案

类似于@mudasobwa 上面的回答,你可以这样做

Enum.into([1,0,0,1,1,0,0,1,0,0,0,1,1,1,0,0], <<>>, fn bit -> <<bit :: 1>> end)

我认为这更简洁一些,因为 Enum.into 可以很容易地放入管道中。

关于Elixir:将位列表转换为二进制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50365157/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com