如何解决如何在没有标准库的情况下使用 rand crate?
我正在使用 Rust 为 Sega Megadrive 进行嵌入式游戏开发,并且想要一个随机数生成器来提高可重玩性。它可以是伪随机的:不需要任何安全措施。
我一直在查看属于“无标准库”部门的 rand crate,但我不确定如何在我的 Crate.toml 中使用它:
[dependencies]
rand = {version = "0.8.3",default-features = false}
当我禁用 default-features
时,前奏中不再有 random
功能。有 Rng
特性,但我太缺乏经验,无法弄清楚如何使用它。
解决方法
要使用没有 rand
的 std
板条箱,您需要手动使用没有它的生成器之一。这些生成器是 OsRng
和 SmallRng
结构。顾名思义,第一个使用操作系统的生成器,它需要 getrandom
板条箱,而 SEGA Megadrive 可能不支持该板条箱。
SmallRng
应该可以正常工作。我们不能使用 random()
函数,我们需要手动创建生成器,然后调用它的方法。
为此,我们首先必须创建一个生成器,如下所示:
let mut small_rng = SmallRng::seed_from_u64([insert your seed here]);
您也可以使用 seed_from_u32
、whose documentation you can find here。
然后我们可以这样使用它:
let rand_num = small_rng.next_u64();
重要的是,我们必须导入 RngCore
trait 才能使用这些函数,如下所示:
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
的生成器在加密方面不安全。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。