gpt4 book ai didi

rust - Rust按位运算

转载 作者:行者123 更新时间:2023-12-03 11:47:21 24 4
gpt4 key购买 nike

我目前正在尝试将rust(作为u16)中的十六进制值转换为存储为单独变量(均为u8类型)的RGB值。我决定执行此操作的方法是使用按位运算符通过以下代码从十六进制获取单独的值:

Color::RGB(((hex >> (16u8)) & 0xFF) as u8, ((hex >> (8u8)) & 0xFF) as u8, ((hex) & 0xFF) as u8)
导致错误:
error: this arithmetic operation will overflow
--> src/style.rs:50:21
|
50 | Color::RGB(((hex >> (16u8)) & 0xFF) as u8, ((hex >> (8u8)) & 0xFF) as u8, ((hex) & 0xFF) as u8)
| ^^^^^^^^^^^^^^^ attempt to shift right by `16_u8`, which would overflow
|
= note: `#[deny(arithmetic_overflow)]` on by default

error: aborting due to previous error; 3 warnings emitted
我已经通过使用u16的 checked_shr(u16)解决了该问题,但这使我的代码比我原本想的要复杂,它具有:
let mut r: u8 = 0;
let mut g: u8 = 0;
let mut b: u8 = (hex as u8) & 0xFF;
if let Some(h16) = hex.checked_shr(16) {
r = (h16 as u8) & 0xFF;
}
if let Some(h8) = hex.checked_shr(8) {
g = (h8 as u8) & 0xFF;
}
Color::RGB(r, g, b)
我想知道是否有更好的方法来解决该错误,是否只是在原始代码中犯了一个错误,和/或是否有更好的方法来解决此问题?我还试图避免关闭 #[deny(arithmetic_overflow)],但这可能是一个错误。感谢您的时间!

最佳答案

通过将十六进制值从u16更改为u32可以解决该问题,谢谢matt和Mihir指出了这一点!

关于rust - Rust按位运算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65136709/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com