Random 生成随机字母和固定数字组合

Random 生成随机字母和固定数字组合,random,rust,Random,Rust,我需要生成一个单字母和6位数字组合的随机序列,例如:F841257 我正在查看兰德的板条箱,但有些东西不太管用 extern crate rand; fn main() { println!("{:?}", rand::random::<char>()); } extern板条箱兰德; fn main(){ println!(“{:?}”,rand::random::()); } 打印类似于'\u{6ae02}'和println!(“{}”,rand::random::

我需要生成一个单字母和6位数字组合的随机序列,例如:
F841257

我正在查看兰德的板条箱,但有些东西不太管用

extern crate rand;

fn main() {
    println!("{:?}", rand::random::<char>());
}
extern板条箱兰德;
fn main(){
println!(“{:?}”,rand::random::());
}
打印类似于
'\u{6ae02}'
println!(“{}”,rand::random::())产生一些奇怪的字形


有人能告诉我如何实现这一目标的正确方向吗?

首先,一个工作程序:

extern板条箱兰德;
使用rand::Rng;
fn main(){
让mut rng=rand::thread_rng();
让字母:char=rng.gen_range(b'A',b'Z')作为char;
let编号:u32=rng.gen_范围(0,999999);
设s=格式!(“{}{:06}”,字母,数字);
println!(“{}”,s);
}
接下来是一个解释

rand::random::()
从整个
char
范围返回一个随机值,也就是说,它可能返回任意Unicode码点。这就是为什么你会看到奇怪的字形——这些很可能是来自上面Unicode平面的值

您需要定义需要生成的内容的边界。首先,你需要一个字母,然后你需要六位数。字母是介于“A”和“Z”之间的任何字符,六位数字可以由0到999999之间的数字表示,打印时用零填充

因此,首先,我们生成一个
u8
,它对应于ASCII中的一个字母,并将其转换为
char
(不幸的是,
rand
cratet没有为
char
s提供范围分布,因此我们必须使用这种间接方式)

其次,我们生成一个介于0和999999之间的
u32


然后我们以所需的格式打印它们。以下是此程序生成的几个值:V285490、Y865809、A704620。

可能没有为
char
提供范围分布的原因是代码点U+D800到U+DFFF(对应于代理项)无效。根据,
gen\U range
在范围内生成[低,高),所以不包括高。我如何更改代码使Z999999成为一个选项?@Sebastian,
rng.gen_range(010000)
?这会起作用。并且
rng.gen_range(b'A',b'Z'+1)作为字母的char
。我认为具有包含范围[low,high]的函数会很好。。。