2016-04-03 231 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