首页 > 解决方案 > 锈溢出左移

问题描述

我试图将 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);
}

标签: rustbit-manipulationlogical-operatorsbit-shift

解决方案


你得到了你的操作员优先级并且投错了:

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);
}

您在尝试移动24 位进行投射,这是您的问题。u8


推荐阅读