在 Elixir 中生成一个随机字节

n_i*_*c_k 1 elixir

这似乎是一个简单的问题,我可能会遗漏一些明显的问题,但我不知道如何在 Elixir 中创建一个返回随机字节的函数。我想要这样的东西:

def random_byte do
  <<0>>..<<255>> |> Enum.random()
end
Run Code Online (Sandbox Code Playgroud)

但是你不能用二进制文件创建一个范围。我可以手动输入所有 256 个的列表,但我希望有更好的方法来做到这一点。

Dog*_*ert 5

你的意思是一个字节的二进制文件?你可以把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)