以不同的量填充灵药中的二进制文件

时间:2017-07-04 19:36:02

标签: binary elixir

我需要一个可以生成由一定数量的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

中实现此功能的简单方法也是如此

1 个答案:

答案 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>>