8
我正在嘗試將矢量轉換爲數組並將其轉換爲最類似Rust的方式。這些宏可以工作,甚至可以與一些不安全的塊一起使用,但它們都感覺非常不穩定。將矢量轉換爲數組並返回
我將不勝感激任何輸入,並且不會出現任何問題,我認爲這段代碼遠沒有好或最佳。我只和Rust一起玩了幾個星期,並且追蹤版本和文檔,所以非常感謝你的幫助。
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
}
關於標準術語的一點:'Vec':vector; '[T]':切片; '[T; N]':數組。 –
要從切片(或切片陣列)切換到「Vec」,請使用['From'](http://doc.rust-lang.org/std/convert/trait.From.html): 'let z:Vec <_> = From :: from(&array [..])' – Shepmaster
謝謝你們兩位的輸入。非常感激。 – dirvine