我需要一个可以生成由一定数量的0个八位字节组成的二进制函数。我虽然以下是可能的
def padding(length) do
bits = length * 8
<<0::bits>>
end
OR
def padding(length) do
<<0::binary-size(length)>>
end
这两个都因参数错误而失败。为什么传递变量以在elixir中创建二进制文件是不可行的。从这个链接看起来就像在erlang中可能的那样。 http://erlang.org/pipermail/erlang-questions/2008-December/040703.html
在Elixir
中实现此功能的简单方法也是如此答案 0 :(得分:6)
你快到了。您的第一次尝试需要明确的size()
才能正常工作:
iex(1)> length = 5
5
iex(2)> bits = length * 8
40
iex(3)> <<0::size(bits)>>
<<0, 0, 0, 0, 0>>
我认为没有办法使用::binary-size(N)
创建此二进制文件。您链接到的Erlang邮件列表线程也会在构造二进制文件之前将字节数乘以8。 Elixir不允许size()
中的表达式像Erlang那样。
您也可以使用:binary.copy/2
,但我不确定这是否与上述效率相同:
iex(4)> :binary.copy(<<0>>, 5)
<<0, 0, 0, 0, 0>>