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