首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何迭代所有字节值(‘0.256’中的overflowing_literals)

如何迭代所有字节值(‘0.256’中的overflowing_literals)
EN

Stack Overflow用户
提问于 2015-08-30 12:08:54
回答 2查看 1.4K关注 0票数 6

我试图迭代所有可能的字节(u8)值。不幸的是,我在0..256中的范围文本被转换为u8256溢出:

代码语言:javascript
复制
fn foo(byte: u8) {
    println!("{}", byte);
}

fn main() {
    for byte in 0..256 {
        foo(byte);
        println!("Never executed.");
    }
    for byte in 0..1 {
        foo(byte);
        println!("Executed once.");
    }
}

上述汇编的内容如下:

代码语言:javascript
复制
warning: literal out of range for u8
 --> src/main.rs:6:20
  |
6 |     for byte in 0..256 {
  |                    ^^^
  |
  = note: #[warn(overflowing_literals)] on by default

根本不执行第一个循环体。

我的解决办法很难看,而且由于演员的原因,我觉得很脆弱:

代码语言:javascript
复制
for short in 0..256 {
    let _explicit_type: u16 = short;
    foo(short as u8);
}

有更好的办法吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-08-30 12:39:19

这是问题Unable to create a range with max value

它的要点是,byte被推断为u8,因此0..256被表示为Range<u8>,但不幸的是256溢出为u8

当前的工作是使用更大的整数类型,并在以后将其转换为u8,因为实际上从未达到256

有一个...已经进入了最后的评论期;也许在将来有可能有for byte in 0...255或它的替代(0..255).inclusive()

票数 5
EN

Stack Overflow用户

发布于 2018-05-11 22:14:14

从Rust 1.26开始,使用语法..=稳定包含范围,因此您可以将其编写为:

代码语言:javascript
复制
for byte in 0..=255 {
    foo(byte);
}
票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32296410

复制
相关文章

相似问题

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