char類型

char官方手冊:https://doc.rust-lang.org/beta/std/primitive.char.html

char類型是Rust的一種基本數據類型,用於存放單個unicode字符,佔用4字節空間(32bit)。

在存儲char類型數據時,會將其轉換為UTF-8編碼的數據(即Unicode代碼點)進行存儲。

char字面量是單引號包圍的任意單個字符,例如'a'、'我'。注意:char和單字符的字符串String是不同的類型。

允許使用反斜線對某些特殊字符轉義:

字符名      字節字面量
--------------------
單引號      '\''
反斜線      '\\'
換行符      '\n'
換頁符      '\r'
製表符      '\t'

Rust不會自動將char類型轉換為其他類型,但可以進行顯式轉換:

  • 可使用as將char轉為各種整數類型,目標類型小於4字節時,將從高位截斷
  • 可使用as將u8類型轉char
    • 之所以不支持其他整數類型,是因為其他整數類型的值可能無法轉換為char(即不在UTF-8編碼表範圍的整數值)
  • 可使用std::char::from_u32將u32整數類型轉char,返回值Option<char>
    • 如果傳遞的u32數值不是有效的Unicode代碼點,則from_u32返回None
    • 否則返回Some(c),c就是char類型的字符
  • 可使用std::char::from_digit(INT, BASE)將十進制的INT轉換為BASE進制的char
    • 如果INT參數不是有效的進制數,返回None
    • 如果BASE超出進制數的合理範圍[1,36],將panic
    • 否則返回Some(c),c就是char類型的字符

例如:


#![allow(unused)]
fn main() {
// char -> Integer
println!("{}", '我' as i32);     // 25105
println!("{}", '是' as u16);     // 26159
println!("{}", '是' as u8);      // 47,被截斷了

// u8 -> char
println!("{}", 97u8 as char);    // a

// std::char
use std::char;

println!("{}", char::from_u32(0x2764).unwrap());  // ❤
assert_eq!(char::from_u32(0x110000), None);  // true

println!("{}", char::from_digit(4,10).unwrap());  // '4'
println!("{}", char::from_digit(11,16).unwrap()); // 'b'
assert_eq!(char::from_digit(11,10),None); // true
}