У меня есть список целых чисел, представляющих биты;например, [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