Appearance
类型转换
在 Rust 中,类型转换可以通过 as 关键字来实现。Rust 提供了多种类型转换方式,包括基本类型之间的转换、字符串与数字之间的转换以及自定义类型之间的转换。
数值转换的语义
- 两个相同大小的整型之间(例如:
i32 -> u32)的转换是一个 no-op。 - 从一个大的整型转换为一个小的整型(例如:
u32 -> u8)会截断。 - 从一个小的整型转换为一个大的整型(例如:
u8 -> u32)会:- 如果源类型是无符号的会补零(zero-extend)。
- 如果源类型是有符号的会符号扩展(sign-extend)。
- 从一个浮点转换为一个整型会向 0 舍入。
- 从一个整型转换为一个浮点会产生整型的浮点表示,如有必要会舍入(未指定舍入策略)。
- 从
f32转换为f64是完美无缺的。 - 从
f64转换为f32会产生最接近的可能值(未指定舍入策略)。
transmute
危险的转换,会直接将内存中的数据解释为不同的类型。
使用transmute,需要引入std::mem,并将代码写入unsafe块中。
rust
use std::mem;
fn main(){
unsafe{
let a = 10;
let b = 12.0;
let c = transmute(b);
println!("{}", b);
}
}