這個代碼顯示了char
需要4個字節:爲什麼在Rust中'char'的大小是4個字節?
println!("char : {}", std::mem::size_of::<char>());
- 爲什麼要過4個字節?
- 大小取決於平臺,還是總是4個字節?
- 如果它總是4個字節,這是爲了什麼特別的?
- 編譯器是否能保證尺寸爲
char
的最小尺寸?
在https://play.rust-lang.org/我還獲得4個字節
這個代碼顯示了char
需要4個字節:爲什麼在Rust中'char'的大小是4個字節?
println!("char : {}", std::mem::size_of::<char>());
char
的最小尺寸?在https://play.rust-lang.org/我還獲得4個字節
首先:在鏽char
是表示Unicode標值獨特的積分值。例如,考慮(浦又名樁,又名U + 1F4A9),在鏽病它將通過在十進制的128169
值的char
(即以十六進制0x1F4A9
)表示:
fn main() {
let c: char = "".chars().next().unwrap();
println!(" is {} ({})", c, c as u32);
}
就這樣說,Rust char
是4個字節,因爲4個字節是2個字節數的最小功率,可以保存任何Unicode標量值的整數值。這個決定是由領域驅動的,而不是由架構約束決定的。
注:強調標量值是,一些「人物」,因爲我們看到它們實際上是由字形Unicode中的多個組合字符組成的,在這種情況下,需要多個char
。
char
是四個字節。它是總是四個字節,它總會是是四個字節。它是四個字節,剩下四個字節。
這不是什麼特別的東西;四個字節只是兩個可以存儲任何Unicode標量值的最小功率。其他各種語言也是一樣。
char是四個字節,它不依賴於體系結構。
爲什麼?根據UTF-8維基百科的文章。
前128個字符(US-ASCII)需要一個字節。接下來的1,920 字符需要兩個字節進行編碼。在基本多語言平面的其餘部分中需要三個字節,其中包含 幾乎所有常用字符。 Unicode的其他平面中的 字符需要四個字節。
所以,如果你想表示任何可能 Unicode字符編譯器必須保存4個字節。
你也應該考慮字節對齊:http://www.eventhelix.com/realtimemantra/ByteAlignmentAndOrdering.htm
請注意'char'不存儲UTF-8編碼點。 'char'實際上是一個UTF-32代碼點,也就是說,只是一個Unicode標量值。 –
我看到這個行爲時,看着結構的對齊,我認爲,char商店,只有ASCII,但我看到沒有 –
所有更驚人的,在這個燈光是這裏提供的理論:https://doc.rust-lang .org/std/primitive.char.html,即:「與往常一樣,記住'人物'的人類直覺可能無法映射到Unicode的定義。例如,'❤️'等表情符號可能不止一個Unicode代碼點;這❤️特別是兩個:「< - 在UTF-32你只有1代碼點的一切... – BitTickler