Saj*_*uuk 14 types type-conversion rust
例如,此代码工作并打印"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
.我怎么能转换u32
到usize
并在使用它nth()
?
Tat*_*shi 19
该as
运算符适用于所有数字类型:
let ch = s.chars().nth(n as usize).unwrap();
Run Code Online (Sandbox Code Playgroud)
Rust强制您转换整数以确保您了解签名或溢出.
整数常量可以有一个类型后缀:
let n = 1u32;
Run Code Online (Sandbox Code Playgroud)
但是,请注意负常数,例如-1i32
内部-
1i32
.
声明没有显式类型规范的整数变量显示为{integer}
,并将从其中一个方法调用中正确推断.
您可以做的最谨慎的事情是,TryFrom
如果该值不能满足以下条件,请使用并惊慌usize
:
use std::convert::TryFrom;
fn main() {
let s = "abc";
let n: u32 = 1;
let n_us = usize::try_from(n).unwrap();
let ch = s.chars().nth(n_us).unwrap();
println!("{}", ch);
}
Run Code Online (Sandbox Code Playgroud)
如果盲目使用as
,则在usize
小于32位的平台上运行时,您的代码将以神秘的方式失败。例如,某些微控制器使用16位整数作为本机大小:
fn main() {
let n: u32 = 0x1_FF_FF;
// Pretend that `usize` is 16-bit
let n_us: u16 = n as u16;
println!("{}, {}", n, n_us); // 131071, 65535
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
9992 次 |
最近记录: |