【发布时间】:2021-03-15 00:38:43
【问题描述】:
对于u16 to u8 使用位移和强制转换,我没有问题,但我怎么能用 u16 的数组来做呢?即使理想情况下,我更愿意直接从 vec 转换为 [u8]。最优雅的方法是什么?
&my_vector[..] // my vector converted to [u16] but I need [u8]
【问题讨论】:
标签: rust
对于u16 to u8 使用位移和强制转换,我没有问题,但我怎么能用 u16 的数组来做呢?即使理想情况下,我更愿意直接从 vec 转换为 [u8]。最优雅的方法是什么?
&my_vector[..] // my vector converted to [u16] but I need [u8]
【问题讨论】:
标签: rust
感谢@Aplet123 的洞察力,能够使其工作:
从 Vec 到 [u8]
let mut my_u16_vec : Vec<u16> = Vec::new();
let my_u8_array = my_u16_vec.align_to::<u8>().1;
从 [u8] 到 Vec
let n = my_u16_vec.len() * 2;
let my_u16_vec_bis:Vec<u16> = (my_u8_array[..n].align_to::<u16>().1).to_vec();
然后由于字节序将值反向写入内存中,然后反转字节:
for e in my_u16_vec_bis:Vec.iter() {
let value = e >> 8 | (e & 0xff) << 8;
}
【讨论】: