这似乎是一个简单的问题,我可能会遗漏一些明显的问题,但我不知道如何在 Elixir 中创建一个返回随机字节的函数。我想要这样的东西:
def random_byte do
<<0>>..<<255>> |> Enum.random()
end
Run Code Online (Sandbox Code Playgroud)
但是你不能用二进制文件创建一个范围。我可以手动输入所有 256 个的列表,但我希望有更好的方法来做到这一点。
你的意思是一个字节的二进制文件?你可以把Enum.random(0..255)里面<<>>:
iex(1)> <<Enum.random(0..255)>>
<<181>>
iex(2)> <<Enum.random(0..255)>>
"x"
Run Code Online (Sandbox Code Playgroud)
另一种方法是使用:crypto.strong_rand_bytes/1(可能会更慢,但这也是加密安全的):
iex(3)> :crypto.strong_rand_bytes(1)
<<205>>
iex(4)> :crypto.strong_rand_bytes(1)
"7"
Run Code Online (Sandbox Code Playgroud)