相关疑难解决方法(0)

如何安全地和惯用地在数字类型之间进行转换?

从(比方说)a转换usize为a 的惯用方法是u32什么?

例如,铸造用4294967295us as u32作品和类型强制转换锈参考文档

数值可以转换为任何数字类型.原始指针值可以转换为任何整数类型或原始指针类型.任何其他强制转换都不受支持,无法编译.

但是4294967296us as u32会默默地溢出并给出0的结果.

我发现ToPrimitiveFromPrimitive提供了很好的功能ToPrimitive,但它们目前被标记为不稳定:

FromPrimitive

什么是在数字(和指针)类型之间转换的惯用(和安全)方式?

更新:to_u32() -> Option<u32>/的可变大小#[unstable(feature = "core", reason = "trait is likely to be removed")]是我问这个问题的一个原因 - 原始场景是我想转换isizeusize所以我可以代表一个树u32(例如usize,然后获得节点2的祖父将be Vec<u32>),我想知道如果let t = Vec![0u32, 0u32, 1u32]小于32位会如何失败.

casting numbers rust

38
推荐指数
1
解决办法
3万
查看次数

如何在u32和usize之间进行惯用转换?

例如,此代码工作并打印"b":

fn main() {
    let s = "abc";
    let ch = s.chars().nth(1).unwrap();
    println!("{}", ch);
}
Run Code Online (Sandbox Code Playgroud)

另一方面,此代码导致不匹配类型错误.

fn main() {
    let s = "abc";
    let n: u32 = 1;
    let ch = s.chars().nth(n).unwrap();
    println!("{}", ch);
}
Run Code Online (Sandbox Code Playgroud)
error[E0308]: mismatched types
 --> src/main.rs:5:28
  |
5 |     let ch = s.chars().nth(n).unwrap();
  |                            ^ expected usize, found u32
Run Code Online (Sandbox Code Playgroud)

出于某种原因,我必须使用u32变量类型n.我怎么能转换u32usize并在使用它nth()

types type-conversion rust

14
推荐指数
2
解决办法
9992
查看次数

如何使用TryFrom将usize转换为u32?

我想将一个usize类型变量转换为u32Rust中的类型变量.我知道usize变量可能包含一个大于2 ^ 32的值,在这种情况下转换应该失败.我正在尝试使用TryFrom特征来执行转换.

这是一个简单的例子(Nightly Rust,Playground):

#![feature(try_from)]
use std::convert::TryFrom;

fn main() {
    let a: usize = 0x100;
    let res = u32::try_from(a);
    println!("res = {:?}", res);
}
Run Code Online (Sandbox Code Playgroud)

代码无法编译,出现以下编译错误:

error[E0277]: the trait bound `u32: std::convert::From<usize>` is not satisfied
 --> src/main.rs:6:15
  |
6 |     let res = u32::try_from(a);
  |               ^^^^^^^^^^^^^ the trait `std::convert::From<usize>` is not implemented for `u32`
  |
  = help: the following implementations were found:
            <u32 as std::convert::From<std::net::Ipv4Addr>>
            <u32 as std::convert::From<u8>>
            <u32 as …
Run Code Online (Sandbox Code Playgroud)

rust

6
推荐指数
1
解决办法
2016
查看次数

如何将构造函数添加到现有的基本类型?

我试图通过添加new方法来创建原始类型和对象类型usize

impl usize {
    fn new(value: &u32) -> usize {
        value as usize
    }
}
Run Code Online (Sandbox Code Playgroud)

我不知道这条消息想表达什么:

impl usize {
    fn new(value: &u32) -> usize {
        value as usize
    }
}
Run Code Online (Sandbox Code Playgroud)

type-conversion traits primitive-types rust rust-crates

3
推荐指数
1
解决办法
1990
查看次数

从"usize"转换为"i32"与其他方式有什么区别?

我正在创建一个函数,使一个大小为n的数组随机数,但我对while的比较会引发错误.

while ar.len() as i32 < size { }
Run Code Online (Sandbox Code Playgroud)

抱怨有:预期中的一个!,(,+,,,::,<,或>发现{.

如果我删除as i32它抱怨,mismatch types如果我添加一个as usize大小变量,那么它不会抱怨.

rust

2
推荐指数
2
解决办法
5388
查看次数