这个代码显示了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