今天重新學習一下官方文檔關於 char的部分: https://doc.rust-lang.org/std/char/index.html
0x01 char的內存佔用長度
在rust中, 一個char 佔用4個字節, 可以通過下面的代碼來驗證:
let v = vec!['h', 'e', 'l', 'l', 'o'];
println!("{}", v.len());
println!("{}", v.len() * std::mem::size_of::<char>());
----
5
20
同時, 如果我們想知道char在utf中實際長度是多少呢?可以如下方法獲得:
println!("{}", 'A'.len_utf8());
println!("{}", 'ß'.len_utf8());
println!("{}", 'ℝ'.len_utf8());
println!("{}", '💣'.len_utf8());
----
1
2
3
4
0x02 chars字符長度
可以看到"abc".len() 方法執行結果是返回字節長度,
pub const fn len(&self) -> usize {
self.as_bytes().len()
}
但更多時候,我們希望拿到它的unicode字符個數.
應該如何實現呢?
let cc = "love: ❤";
println!("{}", &cc);
println!("byte len : {}", &cc.len());
println!("char count : {}", &cc.chars().count());
----
love: ❤
byte len : 9
char count : 7