Skip to content

类型转换

1.as关键字

Rust 中,类型转换必须是显式的,不能像其他语言那样自动隐式转换。需要使用 as 关键字来明确告诉编译器要进行转换。

  • 从小类型转大类型:比如 i32i64 是安全的,因为大类型能完全容纳小类型的值,不会丢失数据。
rust
let small: i32 = 42;
let large: i64 = small as i64;  // 安全转换,值不变
  • 从大类型转小类型: 比如 i32u8 如果原始值超出了目标类型的范围,会发生截断:
rust
let big: i32 = 300;
let small: u8 = big as u8; // 300 超出了 u8 的范围(0-255),结果变成 44
// 相当于 300 % 256 = 44
  • 浮点数转整数:小数部分会被直接丢弃(向零取整):
rust
let pi = 3.99;
let whole = pi as i32; // 变成 3,小数部分没了

let negative = -2.7;
let neg_whole = negative as i32; // 变成 -2

如果浮点数太大,超出了目标整数类型的范围,结果是未定义的,要特别小心。

  • 字符转整数:字符可以转换成它对应的 Unicode 码点值:
rust
let letter = 'A';
let code = letter as u32; // 65,A 的 Unicode 值

let star = '⭐';
let star_code = star as u32; // 11088,星星的 Unicode 值
  • 布尔值转整数:布尔值转换很简单,true 变成 1,false 变成 0:
rust
let yes = true as u8;   // 1
let no = false as i32;  // 0

这种转换在需要将逻辑值参与数学运算时很有用。

MIT Licensed