问题描述
我正在尝试使用from_le_bytes将Vec的未知部分更改为32位整数。我知道大小将在1到4个字节之间,但这就是我所知道的。这是我的尝试:
use std::u32;
fn main () {
let my_vec : Vec<u8> = vec![5,1,2,3];
let user_input = 1;
let mut my_bytes : [u8;1] = Default::default();
let val : u32 = match user_input {
1 => {
my_bytes.copy_from_slice(&my_vec[0..=0]);
my_bytes[0]
},2 => {
my_bytes.copy_from_slice(&my_vec[0..2]);
u16::from_le_bytes(my_bytes)
},4 => {
my_bytes.copy_from_slice(&my_vec[0..4]);
u32::from_le_bytes(my_bytes);
},_ => 0,};
println!("{}",val);
}
这里的问题是my_bytes
是静态的,我不知道我可以在其位置使用的另一种类型,它可能允许动态尺寸。应该如何纠正?
解决方法
基于Rodrigo的评论:
实际上,您不需要临时文件:只需写 u16 :: from_le_bytes(my_vec [0..2] .try_into()。unwrap())
以下作品:
use std::convert::TryInto;
fn main () {
let my_vec : Vec<u8> = vec![5,1,2,1];
let user_input = 4;
let val : u32 = match user_input {
1 => {
my_vec[0].try_into().unwrap()
},2 => {
u16::from_le_bytes(my_vec[0..2].try_into().unwrap()).try_into().unwrap()
},4 => {
u32::from_le_bytes(my_vec[0..4].try_into().unwrap()).try_into().unwrap()
},_ => 0,};
println!("{}",val);
}