初面网初面网

类型转换

在 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块中。

use std::mem;

fn main(){
  unsafe{
    let a = 10;
    let b = 12.0;
    let c = transmute(b);
    println!("{}", b);
  }
}

更新于 2026/6/10