Rust 从[u8;16]中提取前3位并转换为u32

Rust 从[u8;16]中提取前3位并转换为u32,rust,Rust,所以我要做的是屏蔽掉字节数组中的前3位,然后从这些位返回一个u32 我是生锈的初学者,这就是我所做的,它是有效的,但我觉得必须有一个更优雅的方式 fn bits_to_u32(input: &[u8; 16]) -> u32 { let mask: u8 = 0b0000_0111; let masked_out_value: u8 = &input[0].clone() & mask; let value = u32::from_le_b

所以我要做的是屏蔽掉字节数组中的前3位,然后从这些位返回一个u32

我是生锈的初学者,这就是我所做的,它是有效的,但我觉得必须有一个更优雅的方式

fn bits_to_u32(input: &[u8; 16]) -> u32 {

    let mask: u8 = 0b0000_0111;
    let masked_out_value: u8 = &input[0].clone() & mask;
    let value = u32::from_le_bytes([masked_out_value, 0, 0, 0]);

    value
}

有什么建议可以让它更优雅吗?

您可以将其简化为:

const LOW_3_BITS_MASK: u8 = 0b0000_0111;

fn bits_to_u32(input: &[u8; 16]) -> u32 {
    u32::from(input[0] & LOW_3_BITS_MASK)
}

您应该能够将其简化为:

const LOW_3_BITS_MASK: u8 = 0b0000_0111;

fn bits_to_u32(input: &[u8; 16]) -> u32 {
    u32::from(input[0] & LOW_3_BITS_MASK)
}