我需要生成单个字母和6位数组合的随机序列,例如:F841257
我正在调查rand
箱子,但是有些东西不起作用。
extern crate rand;
fn main() {
println!("{:?}", rand::random::<char>());
}
打印类似'\u{6ae02}'
和println!("{}", rand::random::<char>());
的内容会产生一些奇怪的字形。
有人能指出我如何实现这个目标的正确方向吗?
答案 0 :(得分:7)
首先,一个工作计划:
extern crate rand;
use rand::Rng;
fn main() {
let mut rng = rand::thread_rng();
let letter: char = rng.gen_range(b'A', b'Z') as char;
let number: u32 = rng.gen_range(0, 999999);
let s = format!("{}{:06}", letter, number);
println!("{}", s);
}
接下来,解释。
rand::random::<char>()
返回整个char
范围内的随机值,也就是说,它可能会返回任意Unicode代码点。这就是为什么你会看到奇怪的字形 - 这些可能是来自上层Unicode平面的值。
您需要定义生成所需内容的边界。首先,你需要一个字母,然后你需要六位数字。字母是'A'和'Z'之间的任何字符,六位数字可以用0到999999之间的数字表示,在打印时用零填充。
首先,我们生成u8
,其对应于ASCII中的字母并将其转换为char
(遗憾的是,rand
crate不为{{1}提供范围分布} s,所以我们必须使用这样的间接)。
其次,我们在0到999999之间生成char
。
然后我们以所需的格式打印它们。以下是该程序生成的一些值:V285490,Y865809,A704620。