gpt4 book ai didi

arrays - 有没有办法使用动态大小来copy_from_slice?

转载 作者:行者123 更新时间:2023-12-03 11:47:35 24 4
gpt4 key购买 nike

我正在尝试使用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的评论:

Actually you do not need the temporary: just writeu16::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);
}

关于arrays - 有没有办法使用动态大小来copy_from_slice?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64485625/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com