2016-04-03 39 views

回答

7

首先:在鏽char是表示Unicode標值獨特的積分值。例如,考慮(浦又名樁,又名U + 1F4A9),在鏽病它將通過在十進制的128169值的char(即以十六進制0x1F4A9)表示:

fn main() { 
    let c: char = "".chars().next().unwrap(); 
    println!(" is {} ({})", c, c as u32); 
} 

On the playpen

就這樣說,Rust char是4個字節,因爲4個字節是2個字節數的最小功率,可以保存任何Unicode標量值的整數值。這個決定是由領域驅動的,而不是由架構約束決定的。


注:強調標量值是,一些「人物」,因爲我們看到它們實際上是由字形Unicode中的多個組合字符組成的,在這種情況下,需要多個char

3

char是四個字節。它是總是四個字節,它總會是四個字節。它是四個字節,剩下四個字節。

這不是什麼特別的東西;四個字節只是兩個可以存儲任何Unicode標量值的最小功率。其他各種語言也是一樣。

2

char是四個字節,它不依賴於體系結構。

爲什麼?根據UTF-8維基百科的文章。

前128個字符(US-ASCII)需要一個字節。接下來的1,920 字符需要兩個字節進行編碼。在基本多語言平面的其餘部分中需要三個字節,其中包含 幾乎所有常用字符。 Unicode的其他平面中的 字符需要四個字節。

所以,如果你想表示任何可能 Unicode字符編譯器必須保存4個字節。

你也應該考慮字節對齊:http://www.eventhelix.com/realtimemantra/ByteAlignmentAndOrdering.htm

+2

請注意'char'不存儲UTF-8編碼點。 'char'實際上是一個UTF-32代碼點,也就是說,只是一個Unicode標量值。 –

+0

我看到這個行爲時,看着結構的對齊,我認爲,char商店,只有ASCII,但我看到沒有 –

+0

所有更驚人的,在這個燈光是這裏提供的理論:https://doc.rust-lang .org/std/primitive.char.html,即:「與往常一樣,記住'人物'的人類直覺可能無法映射到Unicode的定義。例如,'❤️'等表情符號可能不止一個Unicode代碼點;這❤️特別是兩個:「< - 在UTF-32你只有1代碼點的一切... – BitTickler

相關問題