如何在Rust中将字节数组转换为基本类型?

时间:2014-08-20 21:44:46

标签: casting rust

如何在Rust中将字节数组转换为基本类型?

let barry = [0, 0];
let shorty: u16 = barry;

我已经尝试let shorty: u16 = barry as u16;,但由于"非标量演员" 而无法正常工作。

3 个答案:

答案 0 :(得分:4)

您可以使用按位运算。请注意,这取决于字节顺序。

fn main() {
   let barry = [0, 0];
   let shorty: u16 = barry[0] | (barry[1] << 8);
   println!("{0}", shorty);
}

答案 1 :(得分:1)

The byteorder crate is great for this. You can specify endianness, etc.

答案 2 :(得分:1)

使用原始指针也有一种不安全的方法。好处是它适用于仅存在于堆栈中的任何类型。只要正确格式化了字节数组,这是完全安全的,因为没有指针被保留或修改。只要确保在进行此操作时不存在任何可变引用,我建议将其包装到一个对字节数组和类型参数(具有Clone特征)进行引用的函数中,以便借用检查器可以处理这种情况。

let bytes = [0u8, 0u8];
let value = unsafe {
    let byte_ptr = bytes.as_ptr();
    let ptr = byte_ptr as *const u16; // This could be any type
    (*ptr).clone() // We clone it so that no 
                   // matter what type it is, it gets dereferenced. 
};