當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


Rust char用法及代碼示例


本文簡要介紹rust語言中 Primitive Type char 的用法。

一種字符類型。

char 類型表示單個字符。更具體地說,由於 'character' 不是 Unicode 中明確定義的概念,因此 char 是“Unicode scalar value”,它類似於“Unicode code point”,但不相同。

本文檔說明了許多方法和特征實現char類型。由於技術原因,有額外的單獨文檔std::char 模塊以及。

表示

char 的大小始終為四個字節。這是與給定字符作為 String 一部分的不同表示形式。例如:

let v = vec!['h', 'e', 'l', 'l', 'o'];

// five elements times four bytes for each element
assert_eq!(20, v.len() * std::mem::size_of::<char>());

let s = String::from("hello");

// five elements times one byte per element
assert_eq!(5, s.len() * std::mem::size_of::<u8>());

與往常一樣,請記住,'character' 的人類直覺可能不會映射到 Unicode 的定義。例如,盡管看起來相似,但 'é' 字符是一個 Unicode 代碼點,而 'é' 是兩個 Unicode 代碼點:

let mut chars = "é".chars();
// U+00e9: 'latin small letter e with acute'
assert_eq!(Some('\u{00e9}'), chars.next());
assert_eq!(None, chars.next());

let mut chars = "é".chars();
// U+0065: 'latin small letter e'
assert_eq!(Some('\u{0065}'), chars.next());
// U+0301: 'combining acute accent'
assert_eq!(Some('\u{0301}'), chars.next());
assert_eq!(None, chars.next());

這意味著上麵第一個字符串的內容將要適合一個char而第二個字符串的內容將不會.試圖創建一個char帶有第二個字符串內容的文字會產生錯誤:

error: character literal may only contain one codepoint: 'é'
let c = 'é';
        ^^^

char 的 4 字節固定大小的另一個含義是每個 char 處理最終可能會使用更多內存:

let s = String::from("love: ❤️");
let v: Vec<char> = s.chars().collect();

assert_eq!(12, std::mem::size_of_val(&s[..]));
assert_eq!(32, std::mem::size_of_val(&v[..]));

相關用法


注:本文由純淨天空篩選整理自rust-lang.org大神的英文原創作品 Primitive Type char。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。