首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >锈溢出左移

锈溢出左移
EN

Stack Overflow用户
提问于 2019-09-19 17:53:15
回答 2查看 4.5K关注 0票数 3

我试图将4个字节组合到一个u32中,编译器告诉我,这个变化已经过去了。这是我的密码:

代码语言:javascript
复制
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);
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-09-19 17:57:15

你得到了你的运营商优先权并投错了:

代码语言:javascript
复制
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);
}

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

票数 4
EN

Stack Overflow用户

发布于 2019-09-19 18:53:47

没有必要自己旋转比特--您可以使用函数u32::from_be_bytes()来代替:

代码语言:javascript
复制
pub fn get_instruction(file: &[u8], counter: usize) {
    let ins_bytes = <[u8; 4]>::try_from(&file[counter..counter + 4]).unwrap();
    let ins = u32::from_be_bytes(ins_bytes);
    println!("{:x}", ins);
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58016544

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档