Tôi đang cố gắng tìm ra cách chuyển đổi giống như Rust nhất từ một véc tơ sang mảng và ngược lại. Các macro này sẽ hoạt động và thậm chí có thể được tạo chung với một số khối không an toàn, nhưng tất cả đều cảm thấy rất không giống như Rust.Chuyển đổi vec-tơ thành mảng và quay lại
Tôi sẽ đánh giá cao mọi đầu vào và giữ không có cú đấm, tôi nghĩ rằng mã này là xa đẹp hoặc tối ưu. Tôi chỉ chơi với Rust trong một vài tuần và đuổi theo các bản phát hành và tài liệu để thực sự đánh giá cao sự giúp đỡ.
macro_rules! convert_u8vec_to_array {
($container:ident, $size:expr) => {{
if $container.len() != $size {
None
} else {
use std::mem;
let mut arr : [_; $size] = unsafe { mem::uninitialized() };
for element in $container.into_iter().enumerate() {
let old_val = mem::replace(&mut arr[element.0],element.1);
unsafe { mem::forget(old_val) };
}
Some(arr)
}
}};
}
fn array_to_vec(arr: &[u8]) -> Vec<u8> {
let mut vector = Vec::new();
for i in arr.iter() {
vector.push(*i);
}
vector
}
fn vector_as_u8_4_array(vector: Vec<u8>) -> [u8;4] {
let mut arr = [0u8;4];
for i in (0..4) {
arr[i] = vector[i];
}
arr
}
Một điểm về thuật ngữ chuẩn: 'Vec': vectơ; '[T]': lát; '[T; N] ': mảng. –
Để chuyển từ một slice (hoặc một mảng thành một slice) sang một 'Vec', sử dụng [' From'] (http://doc.rust-lang.org/std/convert/trait.From.html): 'let z: Vec <_> = From :: from (& array [..])' – Shepmaster
Cảm ơn cả hai bạn về đầu vào. Nhiều đánh giá cao. – dirvine