如何在没有标准库的情况下使用 rand 箱?

问题描述 投票:0回答:1

我正在使用 Rust 为 Sega Megadrive 进行嵌入式游戏开发,并且想要一个随机数生成器来提高可重玩性。它可以是伪随机的:不需要任何安全措施。

我一直在查看属于“无标准库”部门的 rand 箱,但我不确定如何在我的 Crate Cargo.toml 中使用它:

[dependencies]
rand = {version = "0.8.3", default-features = false}

当我禁用

default-features
时,前奏中就不再有
random
功能了。有
Rng
特性,但我太缺乏经验,不知道如何使用它。

random rust embedded
1个回答
4
投票

要在没有

rand
的情况下使用
std
板条箱,您需要手动使用无需它即可工作的生成器之一。这些生成器是
OsRng
SmallRng
结构。顾名思义,第一个使用操作系统的生成器,这需要
getrandom
板条箱,而 SEGA Megadrive 可能不支持该板条箱。

不过,

SmallRng
应该可以正常工作。我们不能使用
random()
函数,我们需要手动创建生成器,然后调用它的方法。

为此,我们首先必须创建一个生成器,如下所示:

let mut small_rng = SmallRng::seed_from_u64([insert your seed here]);

您还可以使用

seed_from_u32
您可以在此处找到其文档

然后我们就可以这样使用它:

let rand_num = small_rng.next_u64();

重要的是,我们必须导入

RngCore
特征才能使用这些函数,这样:

use rand::{Rng, SeedableRng};
use rand::rngs::SmallRng;
use rand::RngCore;

SmallRng
依赖于
small_rng
crate 功能,因此您应该以这种方式导入它(在
Cargo.toml
文件中):

rand = { version = "0.8.3", features = ["small_rng"], default-features = false }

我还应该留下免责声明:

SmallRng
的生成器在加密上不安全。

© www.soinside.com 2019 - 2024. All rights reserved.