Из всего диавазона u8
[0, ..., 10, ..., 126, 127, 128, ..., 255]
такое соответствие
["\0", ..., "\n", ..., "~", "\u{7f}", "Err", ..., "Err"]
fn main() {
let mut info: Vec<&str> = vec![];
let mut i: u8 = 0;
loop {
if i > 255 {break};
let u = vec![i];
let t = std::str::from_utf8(&u).unwrap();
// info.push(&t);
println!("{:?} -> {:?}", i, &t);
i = i + 1;
}
println!("\n{:?}", info);
}
fn main() {
let src: Vec<[u8; 1]> = (0..u8::MAX).map(|i| [i]).collect();
let mut info = Vec::<&str>::with_capacity(u8::MAX.into());
for u in &src {
let t = std::str::from_utf8(&*u).unwrap_or("Err");
info.push(t);
}
println!("\n{:#?}", info);
}
info
будет связан лайфтаймом с src
, чтоб избавится от этого нужно хранить в нём не &str
а String
или Box<str>
fn main() {
let info: Vec<Box<str>> = (0..u8::MAX).map(|i| {
let u = [i];
let t = std::str::from_utf8(&u).unwrap_or("Err");
t.into()
}).collect();
println!("\n{:#?}", info);
}
use std::slice;
fn main() {
let range = (0..u8::MAX).collect::<Vec<_>>();
let v = range
.iter()
.map(|x| std::str::from_utf8(slice::from_ref(x)).unwrap_or("Err"))
.collect::<Vec<_>>();
println!("{v:?}")
}