铁锈溢出左移

3 bit-manipulation bit-shift logical-operators rust

我试图将 4 个字节组合成 u32,编译器告诉我移位已溢出。这是我的代码:

pub fn get_instruction(file: &[u8], counter: usize) {
    let ins = u32::from(file[counter] << 24)
        | u32::from(file[counter + 1] << 16)
        | u32::from(file[counter + 2] << 8)
        | u32::from(file[counter + 3]);
    println!("{:x}", ins);
}
Run Code Online (Sandbox Code Playgroud)

mca*_*ton 7

您获得了运算符优先级并且转换错误:

pub fn get_instruction(file: &[u8], counter: usize) {
    let ins = u32::from(file[counter]) << 24
        | u32::from(file[counter + 1]) << 16
        | u32::from(file[counter + 2]) << 8
        | u32::from(file[counter + 3]);
    println!("{:x}", ins);
}
Run Code Online (Sandbox Code Playgroud)

您在尝试移动24 位u8进行了转换,这是您的问题。