如何用随机值初始化16字节数组?

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

我需要用随机值(不是 Vec 或切片)初始化一个 16 字节数组。

我目前正在使用:

let mut rng = rand::thread_rng();
let mut foo = [0u8; 16]; 
rng.fill(&mut foo);
let foo = foo; // discard mutability

但这似乎不必要地冗长,并且将数组写入两次(首先,用零初始化,然后写入随机值)。

我可以将数组初始化为随机值,而不是将其初始化为零并更新为随机值吗?

rust random initialization
1个回答
0
投票

您可以结合使用 rand 箱提供的数组初始化语法和迭代器方法来实现更简洁高效的初始化,如下所示:

use rand::{Rng, distributions::Standard};

fn main() {
    let rng = rand::thread_rng();

    // Create an array of 16 random u8 values
    let foo: [u8; 16] = rng.sample_iter(Standard).take(16).collect::<Vec<u8>>().try_into().unwrap_or_else(|v: Vec<u8>| panic!("Expected a Vec of length 16 but it was {}", v.len()));

    // Use foo as needed
    println!("{:?}", foo);
}


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